意外的cin行为

时间:2014-10-16 06:47:08

标签: c++ string

我正在编写一个函数int count_words(string str),它返回字符串中所有单词的计数。

问题在于,无论输入如何,结果都是1.任何人都可以帮忙吗?

#include <iostream>
#include <string>

using namespace std;

int count_words(string str)
{
    int i,j;
    j = 1;
    int l = str.length();
    for(i = 0; i < l; i++)
    {
        string c = str.substr(i,1);
        if(c == " ")
        {
            j++;
        }
    }
    cout << "The total word in the string: " << j << endl;
    return j;
}


int main()
{
    string str;
    cout << "Please enter a string: ";
    cin >> str;
    int result = count_words(str);
    return 0;
}

3 个答案:

答案 0 :(得分:5)

如果您的字符串包含空格,则应使用cin.getline,因为使用>>运算符且cin仅读取下一个空格

答案 1 :(得分:3)

请参阅std::cin input with spaces?

考虑迭代字符串:

auto cstyle= str.c_str();
for (int i = 0; i < str.length(); ++i)
{
  if (cstyle[i]==' ')//assumes words are delimited by a single space
  {
    j++;
  }
}

答案 2 :(得分:-2)

您应该使用:cin.getline,例如:

int main()
{
    cout << "Please enter a string: ";
    unsigned size=10;
    char*chr=new char[size];
    cin.getline(chr,size);
    string str(chr);
    //cin >> str;
    int result = count_words(str);
    return 0;
}