首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让std::getline在到达字符串流的末尾时通知我?

如何让std::getline在到达字符串流的末尾时通知我?
EN

Stack Overflow用户
提问于 2012-09-25 08:59:55
回答 2查看 3K关注 0票数 4

假设stringstream包含James is 4,我可以编写类似getline (stream, stringjames, ' ')的代码来获取单个单词,但是有没有办法知道我已经到达了行尾呢?

奖金问题!案例1:James is 4案例2:James is four

如果我迭代字符串流中的单词,我希望得到int val为4,但我得到的却是一个字符串,那么检查这一点的最好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-25 09:01:44

检查返回值以查看它的计算结果是true还是false:

代码语言:javascript
复制
if (getline(stream, stringjames, ' '))
    // do stuff
else
    // fail

至于“奖励问题”,你也可以在从流中提取int和其他东西时做同样的事情。如果读取成功,则operator>>的返回值将为true;如果存在错误(例如,存在字母而不是数字),则返回值为false

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2012-09-25 09:21:39

假设stringstream包含James是4,我可以写一些像

(stream,stream_James,‘')这样的东西来获得单个单词,但是有没有办法知道我已经到达了行尾呢?

通常,读入std::string变量是最简单的--默认情况下,它由空格分隔:

代码语言:javascript
复制
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“这样的值。

另一种方法是首先尝试流式传输到整数类型,只有在失败的情况下才重置流上的错误标志并获取字符串。我不记得是否需要重新定位流,以便读取字符串变量,但您可以编写几个测试用例并执行它。

或者,您可以使用正则表达式和子表达式匹配来解析您的输入:当表达式变得更复杂时更有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12574908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档