我istringstream
用来打破字符串的标记。假设我有一个这样的字符串:
print "this is a test"
它将它分成 5 个标记:
打印 | “这 | 是 | 一个 | 测试”
它应该在哪里生成 2 个令牌:
打印 | “这是一个测验”
有什么好的方法可以解决吗?我尝试通过在文本中查找引号并执行子字符串来手动执行此操作,但工作量太大。
我想应该有一个更简单的方法,或者是istringstream
这样做的方法?
我istringstream
用来打破字符串的标记。假设我有一个这样的字符串:
print "this is a test"
它将它分成 5 个标记:
打印 | “这 | 是 | 一个 | 测试”
它应该在哪里生成 2 个令牌:
打印 | “这是一个测验”
有什么好的方法可以解决吗?我尝试通过在文本中查找引号并执行子字符串来手动执行此操作,但工作量太大。
我想应该有一个更简单的方法,或者是istringstream
这样做的方法?
您可以使用wordexp
它来执行此操作,但它有限制,因为它使用命令 shell 进行解析。特别是,它会对处理重定向的 shell 符号做出不良反应。它还将进行环境变量扩展,这可能是也可能不是您想要的。
wordexp_t result;
wordexp(cmdstr.c_str(), &result, 0);
for (int i = 0; result.we_wordv[i]; ++i) {
//...
}
wordfree(&result);
可以在wordexp
手册页中找到详细信息。
那么 iostreams 通过 .. 标记进行标记。在这种情况下,标记用空格分隔。您将不得不逐行阅读(或者可能是整件事!)并自己正确解析它。