在此项目中,用户可以输入文字(最多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&amp;,int)'
请注意,我已加入<iostream>
所以问题是如何解决这个问题为什么会发生?
答案 0 :(得分:0)
你的第一种方法是通过一次修正的声音 - 你需要使用
text = text.substr(0, 140);
而不是text = text.substr(1, 140);
。 C / C ++中的容器(包括一个字符串)以索引0开头,你要求从位置1修剪字符串。这非常好,但如果字符串恰好只有一个字符长,则调用{{1} }不一定会导致程序崩溃,但也不会在所需的输出中结束。
根据this source,如果调用起始位置大于字符串长度,text.substr(1, 140);
将抛出超出范围的异常。如果是一个字符串,则位置1将等于字符串长度,但返回值没有意义(事实上,它甚至可能是未定义的行为,但我无法找到此声明的确认 - 在您和我的情况下,调用它返回一个空字符串)。我建议您按照上面的链接在交互式编码部分自行测试。
您的第二种方法尝试将字符串传递给期望C样式字符数组的函数。同样,可以找到更多here。就像错误说的那样,编译器找不到匹配的函数,因为参数是一个字符串而不是char数组。某些函数将执行字符串到char的转换,但这不是这种情况。您可以自己将字符串转换为char数组,例如描述in this post,但第一种方法更符合C ++实践。
最后一点 - 目前你只读了一行输入,我想你会想改变它。