istringstream不会在引号之间标记文本

时间:2013-03-12 14:59:25

标签: c++ stringstream

我正在使用istringstream来破坏字符串的标记。假设我有一个这样的字符串:

print "this is a test"

它将它分为5个令牌:

  

打印| “这|是| a |测试”

它应该生成2个令牌:

  

打印| “这是一个考验”

有没有好办法解决它?我尝试手动完成,通过在文本中找到引号并执行子字符串,但这是太多的工作。

我想应该有一种更简单的方法,或者istringstream的方法呢?

2 个答案:

答案 0 :(得分:1)

好的iostreams标记为..令牌。在这种情况下,标记由空格分隔。你将不得不逐行阅读(或者整个事情!)并自己解析它。

答案 1 :(得分:1)

您可以使用wordexp执行此操作,但它有限制,因为它使用命令shell进行解析。特别是,它会对处理重定向的shell符号做出反应。它还将进行环境变量扩展,这可能是您想要的也可能不是。

wordexp_t result;
wordexp(cmdstr.c_str(), &result, 0);
for (int i = 0; result.we_wordv[i]; ++i) {
    //...
}
wordfree(&result);

详情可在wordexp man page

中找到