- ベストアンサー
C言語でアナグラムを求めるプログラム
C言語初心者で、勉強中です。 今アナグラムを求めるプログラムをC言語で作成しています。 内容はあらかじめある英単語が書いてあるテキストファイルから互いにアナグラムとなっている英単語をすべて求めてそれを出力するというプログラムです。 どこから手をつけていいかわからず悩んでいます。 そこでヒントをいただこうと思って質問しました。 どなたか回答よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなが選んだベストアンサー
じゃ,私が作るとした時の方針を書きましょう。 (1)テキストファイルから単語をすべて読む。 (2)各単語の文字を分解して,辞書順に整列させた文字列に変換する。 (3)変換された文字列を順にみて,ひとつ前の文字列と同じものがあれば,出力する。 (4)変換された文字列が尽きればおしまい。
その他の回答 (3)
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
順列ですよね。勉強でしたら http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/Permutation.html ソースでしたら http://www5.airnet.ne.jp/tomy/cpro/pe1.htm ではないでしょうか。
- ICE_FALCON
- ベストアンサー率56% (63/111)
#1です。 > ソート関数を使って文字数でソートして一文字ずつ比較すればよいのでしょうか? 文字数でソートではないです。 単語の文字をソートです。wordならdorwになります。qsortでできます。 文字数が違ってたら直ぐ除外できます。strlen 一文字ずつ比較しなくても標準関数でstrstrやstrcmpがあります。 結局言ってることは#2さんと同じです。
- ICE_FALCON
- ベストアンサー率56% (63/111)
とりあえず、文字数で弾いといて、 次にソートして比較したらよいのでは? 標準関数なら strlen, qsort, strstr 辺りを使うかな。
補足
ソート関数を使って文字数でソートして一文字ずつ比較すればよいのでしょうか? クイックソートならば作ったことありますのでがんばってみようと思います。ありがとうございます。
補足
なるほど、単語単語を辞書順に変換すればいいのですね。 それで全部英字とその個数が合致したら出力する、ということでしょうか?