質問: 'b'; } } cout << morce << endl;//すべて入力し終わったとき出力 return 0; } ```
回答: 質問に提示されたソースコードは、以下の問題があります。 * 先ず問題なのは、`for`文の中でどれも入力された文字列全体を判定している(`if (morce == "・-")`等)ことです。 * そして次に問題なのは、入力された文字列自身を置き換えている(`morce = 'a';`等)ことです。 * これは副次的な問題として、変数`alpha`が`変換したときのアルファベットの入れ物の変数`とコメントされて定義されているのに、何にも使われていないことにつながります。 最後の出力も変数`morce`が使われています。 * それから、`for`ループの制御が`0`から`100`未満となっているけれども、それ自身には意味が無い処理であることです。 その上で、質問の主題である「空白で区切られた入力を処理したい」については、コメントで紹介した記事の最初の回答にあるように、`stringstream`を使うことで実現出来るでしょう。 C++ Morse to english 該当部分 > > > ``` > #include > // ... 途中省略 ... > stringstream mors(morse_code); > string letter; > > while (mors >> letter) { > vector::iterator it; > it = find(Morse.begin(), Morse.end(), letter); > size_t dist = distance(Morse.begin(), it); > cout << Letter[dist] << endl; > } > > ``` > > ソースコードだけ提示して何も説明が無いためか、downvoteされていますが、この辺の記事でstringstreamからの入力は空白で区切られて通知されるとあります。 文字列を区切り文字で分割する (istringstream) 【C++入門】stringstreamで文字列を操作する方法 stringstreamを使ってみたんだよ 質問のソースコード該当部分は以下のようになるでしょう。 モールス信号かどうか判定している各`if`も色々と工夫した方が良いですが、今は置いておきます。 ``` #include // ... 途中省略 ... cout << "暗号を入力してください\n"; getline(cin, morce); stringstream ss(morce); string token; while (ss >> token) { if (token == "・-") { alpha += 'a'; } if (token == "-・・・") { alpha += 'b'; } // ... 途中省略 ... } cout << alpha << endl;//すべて入力し終わったとき出力 ```