- ベストアンサー
文字列の並び替えについて。
#include<stdio.h> #include<string.h> main() {char name[40][50]; int i; for(i=1;i<=;i++){ printf("名前="); gets(name[i]); } if(strcmp(name[1],name[2])>0){ printf("%s %s \n",name[2],name[1]);} if(strcmp(name[1],name[2])<0){ printf("%s %s \n",name[1],name[2]);} if(strcmp(name[1],name[2])==0){ printf("%s %s \n",name[1]);} } は二人の名前を早い順に並べ替えるものなんですが、これを五人の名前を並べ替えるものにしたいので、どのようなプログラムにしたらいいのか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
5人の名前を並べ替えて、一行で表示すれば良いのね? 名前を入力するところを、質問の形を尊重して、以下のような感じ。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 5 int main() { char name[N][50]; int i; for(i=0;i<N;i++){ printf("名前="); gets(name[i]); } qsort(name, N, 50, strcmp); for (i = 0 ; i < N ; ++i) { printf("%s ", name[i]); } printf("\n"); return 0; } # 何がどうなっているのかは、じっくり自分で考えましょう
その他の回答 (3)
- a-kuma
- ベストアンサー率50% (1122/2211)
> ありがとうございました。でも、何度やってもメイクに失敗するんですが、どんな本を見ればいいんですか? qsort の行でですか? であれば、 qsort(name, N, 50, (int (*) (const void *, const void *))strcmp); という感じにすれば良いかも。 エラーが起きたときに見るのは、まずは、そのコンパイラのマニュアルでしょう。
お礼
助かります!ありがとうございます!
- mneko
- ベストアンサー率33% (46/139)
#2の者ですが間違ってましたので訂正をします。 文字列の代入のところ name[i]=name[j] これは出来ませんので、strcpy()関数を使ってください。 以下3行同じです。
お礼
なぜかFORのところでメイクに失敗してしまうんですが...。
- mneko
- ベストアンサー率33% (46/139)
nameと同じサイズの一時的な変数を用意しておき、for文やwhile文で 繰り返し処理をしてその中で入れ替えをすると出来ます。 たとえば for(i=0; i< n-1; i++) { for( j=i+1; j<n; j++ ) { if(strcmp(name[i],name[j])>0) { temp=name[i]; name[i] = name@j]; name[j] = temp; } } } こんな感じ、もっと効率の良いソートアルゴリズムもあります。
お礼
ありがとうございます。C言語ってむずかしいっすねー。
お礼
ありがとうございました。でも、何度やってもメイクに失敗するんですが、どんな本を見ればいいんですか?