• 締切済み

英単語をアルファベット順に

英単語をいくつか入力し、それをアルファベット順に並べ替えるプログラムが作りたいのですが。アルファベットをaから順に小さくなっていくようにし、英単語の頭文字を取り出し大きい順に並べ替えるというふうな感じにしたいのですが、なかなかうまくいきません。誰か教えていただけませんか?

みんなの回答

回答No.4

単語が既に char **w に nw 個入っている場合は次のようにすると辞書順にソート出来ます(逆順にソートしたいなら cmp() の a, b を入れ換えれば良い)。 static int cmp(const void *a, const void *b) {  return strcmp(*(const char **) a, *(const char **) b); } void wordsort(char **w, size_t nw) {  qsort(w, nw, sizeof(*w), cmp); }

回答No.3

> intならできるんですが、charにの交換の仕方がわからないんです。 文字の交換ではなく、文字列の交換ですよね? #include <stdio.h> int main() { char* data[] = { "first", "second" }; /* ここから */ char* tmp = data[0]; data[0] = data[1]; data[1] = tmp; /* ここまで */ printf("%s %s\n", data[0], data[1]); return 0; } ホラできた。intと同じでしょ?

  • dra2jp
  • ベストアンサー率25% (18/72)
回答No.2

何がわからないのかを明確に言ってもらわないと何を答えていいのかがわからないですが 英数字はint型であらわせますから 例えばa~zまたはA~Zの英数字を1~52の数字に変換するには 例えば入力した英字を変数chに格納したとし、変換した数値を格納する変数をvとすれば if( 'a' <= ch && ch <= 'z' ) v = ch - 'a'; else if( 'A' <= ch && ch <= 'Z' ) v = ch - 'A' + 26 ; else printf("入力した文字は英字ではない。\n"); で入力した英字を1~52の数字に変換できます。 英字が整数値に対応するのはJIS符号表に元づいています。 例えば 'A'は65、'B'は66...連続...'Z'は90です。 しかし'Z'の次は'a'ではありませんから注意が必要です。 一度JIS符号表をみてみると仕組みがよくわかります。 どの部分がわからないのかが明確に書いてあれば正しい回答もできるのですがこれで参考になれば幸いです。

kannsaijunn
質問者

補足

初歩的な質問で恐縮ですが、並び替えをするには何を使えばよいのですか?

回答No.1

なにがうまくいかないのですか? 整数(int)であればできますか? それができるなら、文字列でもできるでしょう。 比較と交換のやり方が異なるだけで、アルゴリズムは同じですから。

kannsaijunn
質問者

補足

intならできるんですが、charにの交換の仕方がわからないんです。