2016-09-11 7 views
0

私は宿題の最後の章のレビュー質問に取り組んでいます。ユーザーが入力した文字列を数える

私の質問は、ユーザーが文字列を入力した場合、どのように単語の数を数えるのでしょうか?私はそれがクラスでカバーされたとは思わない、またはクラスでカバーされます。

私は文章を要求し、getlineを使って文字列を読むことができましたが、入力をファイルに書き込んだり、同じファイルを開いたり、単語を数えたりするのではなく、そう?

+1

文字列にスペースと改行があるとすぐにその単語を選択します。 –

答えて

3

これは宿題なので、完全な答えではありませんが、<string.h>の機能を確認してください。基本的に文字列内の空白以外の空白文字を見つけ、次の空白文字を見つけ出し、カウンタをインクリメントし、文字列の最後に達するまで繰り返します。

+1

実際には、 ' 'は推奨されていません。代わりに ''を使用してください。 – Rakete1111

+0

@ Rakete1111「」または「」のいずれかが標準です。前者を使用すると、すべての関数は 'std ::'名前空間で宣言されます。後者の場合は、グローバル名前空間に格納されます。 – Davislor

+0

本当ですか?ありがとう、私は彼らがCとの互換性のためだけに存在すると思った。まあ、私のコメントを無視してください:) – Rakete1111

0

std::istringstreamstd::istream_iteratorを組み合わせて、文字列を空白で区切られたトークンの範囲に変更することができます(hereなど)。

範囲内の要素を数えるには、std::distanceを使用してください。

私は宿題なので実際のコードは提供しませんが、さらにお気軽にお問い合わせください。

int count = 0; 
for(int i = 0; i < strlen(str); i++){ 
    while(i < strlen(str) && str[i] != ' ') 
     i++; 
    count++; 
} 

これは、あなたがクラスstring.hの特別な方法なしで手動でカウントを行うことができる方法です。

+0

'std :: distance'の呼び出しまで実際の解析はどうして起こりませんか。これはちょっと進んでいるかもしれませんが、あなたのコードをライブラリ呼び出しのいくつかにまとめていくのはちょっとしたことです。おそらく、何が起こっているのかを把握するために、同時に手作業で行うのがよい方法でしょう。 – Ap31

0

と仮定strは、入力文であるchar *です。

+0

しかし、いくつかの欠点があります: ''''はデリミタであるとしか考えておらず、それは一つの特定の種類の空白です。それはスペース文字の数を数え、それは単語の数と非常に同じではありません。 それはC++よりもCコードのほうが多いので、最後にCをつけておくといいかもしれません。 'int count = 1、i = 0; while(str [i])count + =(str [i ++] == ')); – Ap31

+0

条件に 'strlen'を含むループはすべて疑わしいです。 –

関連する問題