意外的cin行为

Unexpected cin behavior

本文关键字:行为 cin 意外      更新时间:2023-10-16

我正在编写一个函数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;
}

如果字符串包含空格,则应使用cin.getline,因为将>>运算符与cin一起使用只能读取下一个空白

是否看到std::cin带空格输入?

考虑在字符串上迭代:

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++;
  }
}

您应该使用: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;
}