如何使用stringstream在字符串中保留引号?

时间:2012-06-01 04:30:41

标签: c++ string formatting

我有一个字符串向量,包含数字,单词,空格,甚至是引号等奇怪的字符。我试图在使用字符串流时阅读所有内容,以便将双打与字符串分开。

当我这样做时:

stringstream包含

  

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

代码:

stringstream >> mydouble 
stringstream >> mystring

mydouble包含

4165

然后唯一被读入mystring的是

  

此套装包含12 1/2

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

有时我的文件包含:

  

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

     

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

     

此包装包含1个螺丝

1 个答案:

答案 0 :(得分:3)

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

获取整行
std::getline(stringstream, myline);

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

如何解析这条线?我想到了五种选择:

  1. 编写自己的代码,而不依赖于特殊工具。
  2. 使用Lex / Flex和Yacc / Bison。
  3. 使用提升精神。
  4. 使用POSIX <regex.h>
  5. 使用C ++ 11 <regex>或TR1 <tr1/regex>
  6. 然而,这些都不是完全无足轻重的。如果你想知道,对于你的应用,我可能选择1,选择3或选择5.无论你选择做什么,祝你好运。

    如果您不知道从哪里开始,为什么不查看std::getline()中提供的<string>std::atoi()中提供的<cstdlib>?这些应该为你提供一些关于下一步的建议。