※ ChatGPTを利用し、要約された質問です(原文:C言語での文字列ソート動作について)
C言語での文字列ソート動作について
このQ&Aのポイント
C言語で文字列を昇順にソートするプログラムを作成したが、異なる文字数や他の配列の文字が混ざる結果が得られる。
原因が分からず、助言を求めている。サンプルコードを提供。
文字列の入力と文字数のカウント、文字列のソートを行っている。
任意の文字列を入力し、その文字列を昇順にソートするプログラムを作ったのですが、入力する文字の文字数が大きく異なると期待した結果が得られません。
文字数が少なくなったり、他の配列の文字が混ざったりと言う結果に成ってしまっています。
何が原因か分からない状態です。
以下にサンプルを記載させて頂きますので、助言よろしくお願いします。
/*-----------------------------------------
入力例
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
BBBBBBBBBBBBBBBB
AAAAAA
-----------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void swapc(char *cx , char *cy){
char tmp[100];
strcpy(tmp, cx);
strcpy(cx, cy);
strcpy(cy, tmp);
}
int main(){
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)); //メモリ確保
strcpy(*(num+moji_cnt), str_tmp);
}
puts("\n");
// 文字数ソート処理
for(n = 0 ; n < moji_cnt-1 ; n++){
for(m = 1 ; m < moji_cnt-n ; m++){
if(strcmp(*(num+n) , *(num+n+m)) > 0){
swapc(*(num+n) , *(num+n+m)); // 文字列入れ替え
}
}
}
puts("\n");
for(n = 0;n != moji_cnt;n++){
printf("%s\n" , *(num+n));
}
free(num);
}
お礼
返答遅くなってしまい申し訳ありません 上記のコードですが、まさに私の望んだ動作になりました 配列の文字列を入れ替える際、文字そのものを入れ替えるのではなく、アドレスを入れ替えるようにすれば良かったのですね 大変参考になりました ありがとうございました