アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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);
}
    • good
    • 2

> 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と同じでしょ?
    • good
    • 0

何がわからないのかを明確に言ってもらわないと何を答えていいのかがわからないですが



英数字は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符号表をみてみると仕組みがよくわかります。

どの部分がわからないのかが明確に書いてあれば正しい回答もできるのですがこれで参考になれば幸いです。

この回答への補足

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

補足日時:2005/07/26 14:04
    • good
    • 0

なにがうまくいかないのですか?


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

この回答への補足

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

補足日時:2005/07/26 13:57
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!