我正在尝试编写一个返回字符串中字符数的程序。当我编写程序时,我注意到字符串类中存在错误。
说我的程序是这样的:
#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()方法,但结果是一样的。
答案 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 *)(包括空格)的长度,这将返回长度。