假设stringstream包含James is 4,我可以编写类似getline (stream, stringjames, ' ')的代码来获取单个单词,但是有没有办法知道我已经到达了行尾呢?
奖金问题!案例1:James is 4案例2:James is four
如果我迭代字符串流中的单词,我希望得到int val为4,但我得到的却是一个字符串,那么检查这一点的最好方法是什么?
发布于 2012-09-25 09:01:44
检查返回值以查看它的计算结果是true还是false:
if (getline(stream, stringjames, ' '))
// do stuff
else
// fail至于“奖励问题”,你也可以在从流中提取int和其他东西时做同样的事情。如果读取成功,则operator>>的返回值将为true;如果存在错误(例如,存在字母而不是数字),则返回值为false:
int intval;
if (stream >> intval)
// int read, process
else if (stream.eof())
// end-of-stream reached
else
// int failed to read but there is still stuff left in the stream发布于 2012-09-25 09:21:39
假设stringstream包含James是4,我可以写一些像
(stream,stream_James,‘')这样的东西来获得单个单词,但是有没有办法知道我已经到达了行尾呢?
通常,读入std::string变量是最简单的--默认情况下,它由空格分隔:
std::string word;
while (some_stream >> word)
{
// first iteration "James", then "is", then "4", then breaks from while...
}奖金问题!案例一:詹姆斯四岁案例二:詹姆斯四岁
如果我迭代字符串流中的单词,我希望得到int val为4,但我得到的却是一个字符串,那么检查这一点的最好方法是什么?
您最好先将其读取为string,然后检查是否可以将该string转换为数字。你可以尝试strtoi strtol等--它们会很有帮助地指出整个值是否是一个合法的数字,这样你就可以检测并拒绝像"4q“这样的值。
另一种方法是首先尝试流式传输到整数类型,只有在失败的情况下才重置流上的错误标志并获取字符串。我不记得是否需要重新定位流,以便读取字符串变量,但您可以编写几个测试用例并执行它。
或者,您可以使用正则表达式和子表达式匹配来解析您的输入:当表达式变得更复杂时更有用。
https://stackoverflow.com/questions/12574908
复制相似问题