• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語での文字列ソート動作について)

C言語での文字列ソート動作について

このQ&Aのポイント
  • C言語で文字列を昇順にソートするプログラムを作成したが、異なる文字数や他の配列の文字が混ざる結果が得られる。
  • 原因が分からず、助言を求めている。サンプルコードを提供。
  • 文字列の入力と文字数のカウント、文字列のソートを行っている。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.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; } (注)インデントのため、全角空白を使っています。

yahoku
質問者

お礼

返答遅くなってしまい申し訳ありません 上記のコードですが、まさに私の望んだ動作になりました 配列の文字列を入れ替える際、文字そのものを入れ替えるのではなく、アドレスを入れ替えるようにすれば良かったのですね 大変参考になりました ありがとうございました

関連するQ&A

専門家に質問してみよう