• ベストアンサー

文字列の並び替えの仕方

例えば、 "taro", "jiro", "saburo"をアルファベッド順に並び替えて、画面に表示するプログラムを作りたいとすれば、どんなプログラムができるでしょうか? 学校の宿題でこの種の問題が出たのですが、さっぱり分からず困っています。 宜しくお願いします。

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

  • ベストアンサー
  • g_dori
  • ベストアンサー率47% (330/699)
回答No.4

文字にもちゃんと大小がありますよ。 参照URLをごらんあれ。  #No.2の方が気を使ってくれていますが、Cなら避けて通れない道ですので・・・ 具体例を挙げると、 "taro"の場合は {0x74,0x61,0x72,0x6f,0x00} "jiro"の場合は {0x6a,0x69,0x72,0x6f,0x00}  ※ taro[0] == 0x74   jiro[2] == 0x72 という風にchar配列に入力されています。 はい、あとは簡単ですね。

参考URL:
http://e-words.jp/p/r-ascii.html
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

サンプル、並び替える部分は、かなりムダがあるので自分のヤツに置き換えて下さい。というか、qsortを使えばいいけど・ #if 0 "taro", "jiro", "saburo"をアルファベッド順に並び替えて、画面に表示するプログラム #endif #include <stdio.h> #include <string.h> void main(void){ char *data[]={"taro", "jiro", "saburo"}; char *wk; int i,flag; int arraySize = sizeof(data)/sizeof(char*); do{ flag=0; for(i=0;i<arraySize-1;i++){ if(strcmp(data[i],data[i+1])>0){ wk =data[i]; data[i] =data[i+1]; data[i+1]=wk; flag=1; } } }while(flag); for(i=0;i<arraySize;i++) printf("%s\n",data[i]); }

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>並び替える部分の…文字には大小がないので string.h の strcmpを使って文字列の順序(辞書順による大小比較)ができます。 strcmp("taro","jiro")の時 "taro">"jiro"なので関数の値はプラスになります。 つまり、 if(strcmp(data[i],data[j])>0){ /* data[i]がdata[j]より大きかった時の処理 */ } というようなやり方で、大小の判定と処理ができます。 ちなみに strcmp(const char *s,const char *t) で s>tの時>0 s==tの時==0 s<tの時<0 です。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

使用する言語はなんでしょう?

netekun
質問者

補足

すいません、C言語です。

すると、全ての回答が全文表示されます。
回答No.2

えーとですね。 文字コードが… とか 文字の大小比較をする関数が… とかいう話はしないことにします。 (おそらくそういう話の宿題じゃないと思うので…) >文字には大小がないので… で、あれば、文字に対して大小比較ができるように数字を結びつけてあげればいいんですよ。 例えば… 比較用の文字列の配列を作っておく その配列には 比較用配列[0] = 'a'; 比較用配列[1] = 'b'; … のようにすると、「文字(配列の中身)」と「数字(配列のINDEX)」が結びついたので大小比較ができますよね?

すると、全ての回答が全文表示されます。
回答No.1

何がどうさっぱりわからないのでしょうか? 少しも考えずに宿題を丸投げする質問は禁止ですよ。 「○○と××について△△と思う。」 など具体的に質問しましょう。 で、学校の宿題なら ・宿題が正解すること よりも ・問題について考えること が大切なんだから、自分なりの答えを出せばいいのでは? 単に「正解」を提出したいだけなら、授業前にできた友達のノート写せばいいでしょ。

netekun
質問者

補足

ええと、分からない部分を詳しく言うなら、並び替える部分のプログラムが分からないのです。 数字なら大小比較で並び替えることができると思いますが、文字には大小がないのでさっぱりわかりません・・・。 とりあえず、丸投げしているわけではないので、ヒントだけでも教えてください。 配列の仕方はわかっているので、その先に進めるきっかけを何か下さい。 それでは、お願いしますm(__)m

すると、全ての回答が全文表示されます。

関連するQ&A