2

我有一个字符串向量,其中包含数字、单词、空格,甚至是引号之类的奇怪字符。我正在尝试使用字符串流来阅读所有内容,以便可以将双打与字符串分开。

当我这样做时:

字符串流包含

4165 此包装包含 12 1/2" 螺丝

代码:

stringstream >> mydouble 
stringstream >> mystring

mydouble 包含

4165

那么唯一读入 mystring 的是

此包装包含 12 1/2

我怎样才能让它保持整条线?

有时我的文件包含以下内容:

4165 此包装包含 2 1/2" 螺丝

65 此包装包含 12> 1/2" 螺丝

此包装包含 1 个螺丝

4

1 回答 1

3

遗憾的是,流提取运算符>>并不擅长您希望它做的事情。做你想做的事情的正确方法是通过

std::getline(stringstream, myline);

然后编写代码来解析该行。

如何解析行?想到五个选项:

  1. 编写您自己的代码来完成它,而无需依赖特殊工具。
  2. 使用 Lex/Flex 和 Yacc/Bison。
  3. 使用提升精神。
  4. 使用 POSIX <regex.h>
  5. 使用 C++11<regex>或 TR1 <tr1/regex>

然而,这些都不是完全微不足道的。如果您想知道,对于您的申请,我可能会选择选项 1、选项 3 或选项 5。无论您选择做什么,祝您好运。

如果您不知道从哪里开始,您为什么不查找std::getline(), 呈现在<string>, 和std::atoi(), 呈现在<cstdlib>?这些应该为您提供一些关于下一步要去哪里的想法。

于 2012-06-01T04:54:25.293 回答