私はC++ Primerの練習をしていますが、基本的にswitch文を使って入力したテキストの母音の数を数えています。charが改行であるかどうかを調べる
whileループを使用してテキストを入力しました。
while(cin >> ch)
ケースa、e、i、o、uの各ケースについて整数変数をインクリメントします。今度は質問の次の部分でスペース、タブ、改行も数えます。
私は
case ' ':
をやっなど '\ tの' と '\ n' を使用してみました。しかし、それはこれらのケースを計算しないようです。私はまた、デフォルトを使用し、if elseステートメントを使用してみました。
などですが、これも進行しません。私はまた、 ''、 '\ t'、 '\ n'の整数値を入れてみました。私はここで間違って何をしていますか?また、isspace()を使用すると合計の数を数えることができますが、それぞれを個別に計算する必要があることも知っています。私は平等テストがなぜ仕事をしないのか分かりません。
空白を読み取るための簡単な方法はありますか?本書のこの時点で、あなたが言及したテクニックはカバーされていません。よりシンプルなソリューションが必要です。 – Ares
@Comrade: 'std :: getline(std :: cin、str)'を使うことができます。ここで 'str'は' std :: string'です。それはスペースを読み込みますが、改行は 'std :: getline()'の呼び出し成功回数で別々にカウントする必要があります(最後の行が改行で終わっていると間違った結果になるかもしれません)。また、 'std :: istreambuf_iterator'の 'char'sのシーケンスを反復することもできますが(これはおそらく最も速いアプローチです)、これは本で扱っているとは思えません。 –
母音を数える部分では、小文字と大文字の母音の両方を1つのケースでカウントする必要があります。ですから、私は実際にswitch(tolower(ch))を持っています。 getline(cin、str)をstrが文字列の場合は、文字列に使用できるtolower()と同様の関数がありますか? – Ares