我正在尝试编写一个返回字符串中字符数的程序.当我编写程序时,我注意到字符串类中存在错误.
说我的程序是这样的:
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果我的输入是测试字符串,我应该看到数字11作为输出.
但是,我得到的输出是这样的:
Number of characters: 4
Run Code Online (Sandbox Code Playgroud)
当字符串中有空格时,似乎size()方法不起作用.
我的问题是,是否有另一种方法来获取字符串中的字符数?我尝试了length()方法,但结果是一样的.
jsa*_*eew 16
那是因为你的
cin >> input;
Run Code Online (Sandbox Code Playgroud)
只读取第一个空格字符.如果您想获得整行,请使用以下代码:
std::string s;
std::getline(std::cin, s);
Run Code Online (Sandbox Code Playgroud)
这不是错误,更具体地说,实际上与字符串类无关.
它与istream类(cin)有关.cin的运算符>>执行"格式化输入",也就是说,输入由空格分隔.在按Enter键后,您将"Test"读出为字符串,并在输入缓冲区中保留"String".事实上,"测试"是四个字符长.
考虑使用std :: getline或istream :: getline来读取整个输入行并进行更多控制.请务必仔细阅读这些方法的文档,因为它们对输入流中剩余的内容有不同的行为,如果与oeprator >>用法混合在一起,可能会导致结果.