字符串大小限制输入 cin.get() 和 getline()



在此项目中,用户可以键入文本(最多140个字符(。 所以对于这个限制,我曾经使用过getline()

string text;
getline(cin, text);
text = text.substr(1, 140);

但在这种情况下,cout << text << endl;的结果是一个空字符串。

所以我用了cin.get()

cin.get(text, 140);

这次我收到此错误:调用"std::basic_istream::get(std::__cxx11::string&, int("没有匹配函数

请注意,我已经包括了<iostream>

所以问题是我该如何解决这个问题,为什么会发生这种情况?

您的第一种方法是合理的,只需一次更正 - 您需要使用

text = text.substr(0, 140);

而不是text = text.substr(1, 140);.C/C++ 中的容器(包括字符串(以索引 0 开头,并且您请求从位置 1 修剪字符串。这很好,但如果字符串恰好只有一个字符长,调用text.substr(1, 140);不一定会导致程序崩溃,但也不会最终出现在所需的输出中。

根据此来源,如果在起始位置大于字符串长度的情况下调用,substr将引发超出范围的异常。在一个字符串的情况下,位置 1 将等于字符串长度,但返回值没有意义(事实上,它甚至可能是一个未定义的行为,但我找不到这个语句的确认 - 在你和我的情况下,调用它返回一个空字符串(。我建议您在上面的链接下方的交互式编码部分中自行测试。

第二种方法尝试将字符串传递给需要 C 样式字符数组的函数。同样,可以在这里找到更多。就像错误所说的那样,编译器找不到匹配的函数,因为参数是一个字符串而不是 char 数组。某些函数将执行字符串到字符的转换,但此处不是这种情况。您可以自己将字符串转换为 char 数组,例如本文中所述,但第一种方法更符合C++实践。

最后一点 - 目前您只读取一行输入,我假设您会想要更改它。

最新更新