如果字符串中有空格,String.size()返回错误的数字

时间:2010-12-08 23:49:23

标签: c++ string size

我正在尝试编写一个返回字符串中字符数的程序。当我编写程序时,我注意到字符串类中存在错误。

说我的程序是这样的:

#include <iostream>
#include <string>
using namespace std;

int main()
{
   string input;

   cout << "Input string: ";
   cin >> input

   cout << "Number of characters: " << input.size() << endl;

   return 0;
}

如果我的输入是测试字符串,我会看到数字 11 作为输出。

然而,我得到的输出是:

Number of characters: 4

当字符串中有空格时,似乎size()方法不起作用。

我的问题是,是否有其他方法可以获取字符串中的字符数?我尝试了length()方法,但结果是一样的。

4 个答案:

答案 0 :(得分:16)

那是因为你的

cin >> input; 

只能读取第一个空格字符。 如果您想获得整行,请使用以下代码:

std::string s;
std::getline(std::cin, s);

答案 1 :(得分:5)

这不是错误,更具体地说,实际上与字符串类无关。

它与istream类(cin)有关。 cin的运算符&gt;&gt;执行“格式化输入”,也就是说,输入由空格分隔。在按Enter键后,您将“Test”读出为字符串,并在输入缓冲区中保留“String”。事实上,“测试”的长度是四个字符。

考虑使用std :: getline或istream :: getline来读取更多控件的整行输入。请务必仔细阅读这些方法的文档,因为它们对输入流中剩余的内容有不同的行为,这可能会导致如果与oeprator混合在一起时可能没有预期的结果&gt;&gt;的使用。

答案 2 :(得分:4)

这是cin >> input含义的结果,当找到任何空格时,它会停止读取。如果您想继续阅读直到行尾,请尝试getline

答案 3 :(得分:0)

正确输入后,您可以使用strlen(string_name)获取字符串或char指针(char *)(包括空格)的长度,这将返回长度。