0

私のコードは最初はうまく動作しますが、ループの問題があります:

  1. 私のコードは、単語に含まれる文字をカウントしていません

  2. 2 回目に「はい」を押すと、すべてが印刷されます。間違った場所にループがあるに違いありませんが、一生見つけることができません。

#include <string> 
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
    char character;
    string sentence;
    char answer;
    int cCount;
    while(1) {

        cout << "Enter a character to count the number of times it is in a sentence: ";
        cin >> character;
        cout << "Enter a sentence and to search for a specified character: ";
        cin >> sentence;
        if(character == '\n' || sentence.empty())
        {
            cout << "Please enter a valid answer:\n";
            break;

        }
        else {
            cCount = count(sentence.begin(), sentence.end(), character);
            cout << "Your sentence had" << " " << cCount << " " << character << " " << "character(s)" << '\n'; 
         }

    cout << "Do you wish to enter another sentence (y/n)?: \n";
    cin >> answer;
    if (answer == 'n'){
        break;
        }
    }
return 0;
}
4

6 に答える 6

2

コードを読むだけで、文を取得する場所を除いて問題ないように見えます。cin を使用すると、改行またはスペースが見つかるまでしか読み取れないため、文を入力している場合は、すべての単語を別の入力として読み取ります。

getline(cin, statement) を試して、問題が解決するかどうかを確認してください。

編集:追加するのを忘れました:getlineの後にcin.ignore()を使用してください。cin は改行 (またはスペース) まで読み取りますが、getline は改行までしか読み取らないため、改行はまだバッファー内にあります。

于 2013-11-13T06:29:45.320 に答える
1

使用する

cin.ignore();  //dont forget to use cin.ignore() as it will clear all previous cin
getline(cin, sentence, '\n'); //take the sentence upto \n i.e entered is pressed
于 2013-11-13T06:35:20.360 に答える
0

使用cinすると、改行またはスペースで終わります。例: 入力hello worldすると、hello

そして、あなたは試すことができます getline

改行で終わります

于 2013-11-13T06:38:31.350 に答える
0

ループは間違っていません。間違っているのは、あなたがそれを仮定していることです

cin >> sentence;

実際の動作とは異なる動作をします。

テキストの行を読みたい場合は、これを行います

getline(cin, sentnence);

コードは 1 つの単語のみを読み取ります。

于 2013-11-13T06:32:38.750 に答える
-1

試す:

cCount = count(sentence.c_str(), sentence.c_str()+sentence.length(), character);
于 2013-11-13T06:47:00.117 に答える