- ベストアンサー
C言語での文字列ソート動作について
- C言語で文字列を昇順にソートするプログラムを作成したが、異なる文字数や他の配列の文字が混ざる結果が得られる。
- 原因が分からず、助言を求めている。サンプルコードを提供。
- 文字列の入力と文字数のカウント、文字列のソートを行っている。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな風にしたかったのでしょうか。 #include <stdio.h> #include <string.h> #include <stdlib.h> void swapc(char **cx , char **cy) { char *tmp; tmp = *cx; *cx = *cy; *cy = tmp; } int main(void) { char *num[100]; char str_tmp[100]; //文字列一時格納 int moji_cnt; //入力した文字列のカウント int n, m; // 文字列入力処理開始 printf("文字列を入力してください\n"); for (moji_cnt = 0 ; moji_cnt < 3 ; moji_cnt++) { scanf("%s", str_tmp); num[moji_cnt] = (char *) malloc(sizeof(char) * (strlen(str_tmp) + 1)); //メモリ確保 if (!num[moji_cnt]) fprintf(stderr, "outof memory\n"), exit(1); strcpy(num[moji_cnt], str_tmp); } puts("\n"); // 文字列ソート処理 for (n = 0; n < moji_cnt - 1; n++) { for (m = n + 1; m < moji_cnt; m++) { if (strcmp(num[n], num[m]) > 0) { swapc(&num[n], &num[m]); // 文字列入れ替え } } } puts("\n"); for (n = 0; n < moji_cnt; n++) { printf("%s\n", num[n]); } for (n = 0; n < moji_cnt; n++) { free(num[n]); } return 0; } (注)インデントのため、全角空白を使っています。
お礼
返答遅くなってしまい申し訳ありません 上記のコードですが、まさに私の望んだ動作になりました 配列の文字列を入れ替える際、文字そのものを入れ替えるのではなく、アドレスを入れ替えるようにすれば良かったのですね 大変参考になりました ありがとうございました