0

我的代码第一次运行并运行良好,但我遇到了循环问题:

  1. 我的代码没有计算单词中的字符

  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, sentence) 看看是否能解决问题。

编辑:忘记添加:在 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);

您的代码只读取一个单词。

于 2013-11-13T06:32:38.750 回答
0

这是有效的,试试这个。

#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: ";
        fflush(stdin);
        getline(cin, sentence, '\n');
        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;
}

在您输入第一个输入并输入该输入后,该输入被视为句子中的输入因此,您需要刷新该输入,然后您可以扫描该句子。

于 2013-11-13T06:41:33.367 回答
-1

尝试:

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