質問: 0; *(a+i) != '\0' && *(b+i) != '\0'; i++ ) { if(*(a+i)<*(b+i)){ return 1; } if(*(a+i)>*(b+i)){ return -1; } } if(*(a+i)!='\0'){ return 1; } if(*(b+i)!='\0'){ return -1; } return 0; } ``` 2についてが、コードを書いてみましたがいくつかエラーが出てしまいました。 ポインタのポインタ(アドレス)を使った具体的な書き方がつかめておらず、何点か不明な点があります。 〇わからないこと ・//str=(char *)malloc(sizeof(char)*n);では、エラーがでなかったがその直下にあるようにfor文でループさせるとエラーがでます。なぜでしょうか?また、このnは文字列の個数(何個の文字列を入力するか)なのですが、本来は1つ1つの文字列の長さ(文字が何個あるか)を入れるべきなのですが、文字列の長さを計算するにはまず文字列を入力しなければならないわけで、??となっております。 ・sort関数内で、tはint型で宣言されています。ここに代入するには文字列の先頭アドレスを代入すればいい、という認識であっているのでしょうか?(問題には参考としてバブルソートが書かれているだけなので無理して合わせる必要はない、とは思いますが) 〇わかったこと ・//str=(char *)malloc(sizeof(char)*n);の意味 char型のサイズ(1バイト)×n(ここでは文字列の個数(何個の文字列を入力するか)ですが)分のメモリをmalloc関数で確保し、それを(char *)に明示的に変換している。(左辺のポインタ変数strにあわせている?) ・関数sortの引数にポインタのポインタ(アドレス)があるが、そこにはポインタ変数のアドレスを渡せばよい。 ・参考として↑にあるバブルソートには文字列がint型に入っているが、そこにはポインタのアドレスを渡せばよい。 ``` #include #include int hantei(char *a, char *b); void sort(char **argv,int n); int main(void) { char *str; char enter; int i,n; printf("複数の文字列配列を辞書順に並び替えるぞ\n"); printf("文字列の個数入力して→"); scanf("%d",&n); enter=getchar(); //str=(char *)malloc(sizeof(char)*n); //下記にて説明有り for(i=0;i ",i+1); scanf("%s",str+i); } sort(&str,n); for(i=0;i=0;i--){ //「char *型はint型に変換できない」とエラーが出ます。 for(j=0;j*(b+i)){ return -1; } } if(*(a+i)!='\0'){ return -1; } else if(*(b+i)!='\0'){ return 1; } return 0; } ``` 未熟者ですがどうかご指導よろしくお願いします。 ### 補足情報(FW/ツールのバージョンなど) 使用しているツールは、BCC Developerで、コンパイラはBorland C++ Compilerを使用しています。
回答: hantei()が辞書式ではなく文字コード順比較になってますよ。 英数字だけ扱えばいいのなら、大文字と小文字の処理をしないといけません。 コード順→A