在这个项目中,用户可以输入一个文本(,最多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>
所以问题是我如何解决这个问题为什么会发生这种情况?
发布于 2018-06-09 06:49:39
您的第一种方法是正确的,只需进行一次更正-您需要使用
text = text.substr(0, 140);
而不是text = text.substr(1, 140);
。C/C++中的容器(包括字符串)从索引0开始,您请求从位置1中修剪字符串。这很好,但是如果字符串恰好只有一个字符长,调用text.substr(1, 140);
不一定会导致程序崩溃,但也不会在期望的输出中结束。
根据本源,如果调用的起始位置大于字符串长度,substr
将抛出超出范围的异常。对于一个字符串,位置1将等于字符串长度,但返回值没有意义(实际上,它甚至可能是一种未定义的行为,但我找不到该语句的确认--在您和我的情况下,调用它返回一个空字符串)。我建议您自己在上面链接后面的交互式编码部分中测试它。
第二种方法试图将一个字符串传递给一个函数,该函数需要C风格的字符数组。同样,还可以找到更多的这里。正如错误描述的那样,编译器无法找到匹配的函数,因为参数是字符串而不是char数组。有些函数将执行字符串到char的转换,但这里不是这样的。您可以自己将字符串转换为char数组,例如,描述了在这个岗位上,但第一种方法更符合C++实践。
最后一个注意事项--目前你只读了一行输入,我想你会想要改变这一点。
https://stackoverflow.com/questions/50773022
复制相似问题