• ベストアンサー

文字列の並び替えについて。

#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]);} } は二人の名前を早い順に並べ替えるものなんですが、これを五人の名前を並べ替えるものにしたいので、どのようなプログラムにしたらいいのか教えてください。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

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; } # 何がどうなっているのかは、じっくり自分で考えましょう

hanash21
質問者

お礼

ありがとうございました。でも、何度やってもメイクに失敗するんですが、どんな本を見ればいいんですか?

その他の回答 (3)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.4

> ありがとうございました。でも、何度やってもメイクに失敗するんですが、どんな本を見ればいいんですか? qsort の行でですか? であれば、 qsort(name, N, 50, (int (*) (const void *, const void *))strcmp); という感じにすれば良いかも。 エラーが起きたときに見るのは、まずは、そのコンパイラのマニュアルでしょう。

hanash21
質問者

お礼

助かります!ありがとうございます!

  • mneko
  • ベストアンサー率33% (46/139)
回答No.3

#2の者ですが間違ってましたので訂正をします。 文字列の代入のところ name[i]=name[j] これは出来ませんので、strcpy()関数を使ってください。 以下3行同じです。

hanash21
質問者

お礼

なぜかFORのところでメイクに失敗してしまうんですが...。

  • mneko
  • ベストアンサー率33% (46/139)
回答No.2

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; } } } こんな感じ、もっと効率の良いソートアルゴリズムもあります。

hanash21
質問者

お礼

ありがとうございます。C言語ってむずかしいっすねー。

関連するQ&A