• 締切済み

VC++ 言葉の並び替え

授業でVC++2013を扱っているのですが、今回、以下のような課題が出題されました。 「アルファベットの順がおかしい英単語を入力して、正しい英単語を表示させよ」 (例) alpep → apple 条件  ・クラスを一つ以上使う  ・静的(static)メンバ関数を使う  ・string class を使ってはならない また、参照とする英単語辞書のようなものはファイルストリームで読み込め、とのことです。 正直、何をどうすればよいのかさっぱりなので、筋道だけでも教えていただきたいです。 なお、授業はC++初心者用なので、あまり複雑なことを使う方法だと私自身さっぱりわからないので、そちらも配慮いただけると幸いです。 取り敢えず、今まで扱ったものとしては繰り返し、条件分岐、配列、ポインタ、オブジェクト、クラスといったところです。

みんなの回答

回答No.4

#2 に基づいて実装してみた(string使用) #include <iostream> #include <fstream> #include <map> #include <algorithm> #include <string> /* --- foo.txt apple banana cherry grape orange */ using namespace std; int main() { map<string,string> dic; { string word; string key; ifstream stream("foo.txt"); while ( stream >> word ) { key = word; sort(key.begin(), key.end()); dic[key] = word; } } string inputs[] = { "allep", "nanaba", "rryche", "peach" }; for ( int i = 0; i < 4; ++i ) { string word = inputs[i]; string key = word; sort(key.begin(), key.end()); cout << word << " -> "; auto iter = dic.find(key); if ( iter != dic.end() ) { cout << iter->second << endl; } else { cout << "???" << endl; } } } --- 実行結果(Visual C++ 2013: vc12) --- allep -> ??? nanaba -> banana rryche -> cherry peach -> ???

Z-Master
質問者

お礼

ありがとうございます。いただいた例を参考に自分でプログラムを作っていきたいと思います。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

まあ「どのアルファベットを何回使っているか」を数えればいいだけなんだろうけど.... 「string class を使ってはならない」という条件だから, wstring は使っていいんじゃないでしょうか>#1.

Z-Master
質問者

お礼

回答ありがとうごさいます。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> また、参照とする英単語辞書のようなものはファイルストリームで読み込め、とのことです。 事前に読み込みした際に、アルファベット順を一定の順序に並べ替えた辞書にしとくとか。 aelpp:apple aegnor:orange amoott:tomato 入力された文字は、同じように並べ替えすれば照合できます。 canoe(カヌー)とocean(海)だと、どっちだか分からないですが。 > ・クラスを一つ以上使う 単語のクラス作って、 ・単語を指定してのコンストラクタ ・単語と、並べ替えた単語を保持 ・単語と、並べ替えた単語を取得 ・並べ替えた単語の比較 とか。 > ・静的(static)メンバ関数を使う 意図がイマイチ不明瞭ですが、テキトーに使えなくは無いかも。 > ・string class を使ってはならない 単語の長さを制限するとかすれば、無くても問題ないかも。

Z-Master
質問者

お礼

回答ありがとうございます。頑張ってやってみます。

回答No.1

あらかじめ読み込まれた単語表にある各単語:wordについて、 入力された文字列の文字を並び替えてwordと一致させることが できたらそのwordを出力する。 で、いいのかな? - テキストファイルから単語表を作る -- for ( 単語表にある各単語 : word ) { --- for ( 入力文字列を並び替えてできる語 input ) { ---- if ( word == input ) { word を出力する } --- } - } 「string classを使うな」の条件が付いた時点で 僕は回答しない。ナンセンスだから。

Z-Master
質問者

お礼

回答ありがとうございます。

関連するQ&A

専門家に質問してみよう