【发布时间】:2013-12-18 02:08:05
【问题描述】:
我想从std::istream 中跳过所有SPs 和HTs,然后从中读取一个字符串直到第一个SP 或HT,然后跳过所有SPs 和@987654328 @s,然后阅读所有内容,直到换行符 \n。
我试过了
stream >> str >> std::ws;
std::getline(stream, rest);
但不太有效,因为std::ws 吃换行符以及空格和水平制表。我想我能做到
stream >> str;
std::getline(stream, rest);
trim_leading_whitespace(rest);
甚至std::getline(stream, temp); do_regex_match("/* some complex regex */", temp, str, rest);。
是否有可能仅使用iostream 相关的东西以某种方式修复第一次尝试?它个人看起来最简洁,当然欢迎任何关于如何简洁明了地编写它的建议。
【问题讨论】:
-
@AdriC.S.
ignore只忽略一个特定字符。当然,我可以设计类似while(stream.ignore(1, '\x20') || stream.ignore(1, '\t'));...实际上,让我检查一下。 -
但是,如果你有
std::numeric_limits<std::streamsize>::max()而不是count = 1,它不应该丢弃所有的空格吗? -
这不是工作流 >> str >> someChar; std::getline(流,休息); rest2 = someChar + rest;
-
@AdriC.S.不,
ignore会跳过所有内容,直到第一个delim字符。