【发布时间】:2015-06-18 17:42:16
【问题描述】:
我需要使用 strok 标记一个数学表达式。我已经做了一些事情,但我无法为我的向量添加分隔符 当我运行我得到的代码时 2x 4y 6 3 这个输出 如何获得向量的分隔符以及如何获得这样的输出 2x + 4y ^ 6 - 3 我的代码
int main()
{
vector<string> finalVector;
char input[1024]="2x+4y^6-3";
char *token = strtok(input, "^+-/()/t");
while (token != NULL) {
finalVector.push_back(token);
token = strtok(NULL, "^+-/()/t");
}
for (int i = 0; i < finalVector.size(); i++)
cout << finalVector.at(i) << " ";
return 0;
}
【问题讨论】:
-
您不能为此使用
strtok,因为它会丢弃分隔符,而只会为您提供在分隔符之间的文本。没有办法让它不这样做。我会亲自使用手写标记器或flex标记器生成器来解决这个问题。 -
您可能会使用编译器-编译器(Lex/Yacc、Bison、ANTLR、Boost ......),尽管它可能看起来有点矫枉过正。