计算字符串中的字符数

时间:2013-11-13 06:26:50

标签: c++ string loops

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

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

  2. 第二次按“是”时,它会将所有内容都打印出来。我必须在错误的地方有一个循环,但我找不到它的生命。

  3. #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;
    }
    

6 个答案:

答案 0 :(得分:2)

通过阅读你的代码,它看起来很好,除非你得到了句子。使用cin,它只会在看到换行符或空格之前读取,所以如果你输入一个句子,它会将每个单词作为不同的输入读取。

尝试使用getline(cin,sentence)并查看是否可以解决问题。

编辑:忘记添加:在getline之后使用cin.ignore()。 cin读取并包括换行符(或空格),而getline只读取换行符,因此换行符仍在缓冲区中。

答案 1 :(得分: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

答案 2 :(得分:0)

你没有错误的循环。你假设

是错的
cin >> sentence;

做了与实际不同的事情。

如果您想阅读一行文字,请执行此操作

getline(cin, sentnence);

您的代码只读一个单词。

答案 3 :(得分:0)

使用cin它将以换行符或空格结尾 例如: 当您输入hello world时,它将获得hello

你可以试试 getline

它将以换行符结束

答案 4 :(得分: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;
}

输入第一个输入并输入后,输入被视为句子中的输入 所以,你需要刷新它,之后你可以扫描那句话。

答案 5 :(得分:-1)

尝试:

cCount = count(sentence.c_str(), sentence.c_str()+sentence.length(), character);