【发布时间】:2018-03-22 06:05:02
【问题描述】:
我的代码当前将名为aLine 的用户输入字符串解析为不同的标记。目前,如果我输入x = "Foo" .add. "Bar",则标记被解析为|x| |=| |"Foo"| |.add.| |"Bar"|,这是完美的。但是,如果我尝试执行以下x = "Foo and" .add. "Bar",它只会解析到|"Foo and Bar"|,然后代码进入无限循环。为什么会这样?
void splitLine(string aLine) {
stringstream ss(aLine);
string stringToken, outp;
char delim = ' ';
while (getline(ss, stringToken, delim)) { // Break line into tokens and store them in rTokenBag
if (stringToken[0] == '"' && stringToken[stringToken.size() - 1] != '"' ) {
string torzen;
getline(ss, torzen, '"' );
stringToken += ' ' + torzen + '"';
}
Token t(readToken(stringToken)); // assing value of stringToken parsed to t, this labes invalid tokens
R_Tokens.push_back(t);
}
}
【问题讨论】:
-
你的意思是它只解析到
|"Foo and"|?我看不出您显示的代码有什么问题,除了第二次读取时没有错误检查。您的问题可能在readToken内部吗? -
@super 是的,我使用断点进行了调试,这就是发生的情况:代码解析带有空格的字符串没问题,比如“Foo and”,将其作为 stringToken 发送到 readToken 并且没问题,但是紧接着下一个传递 stringToken,while 循环内的字符串变量,是空的。并得到 readLine empty
-
@John 啊,好的。我知道问题是什么,发布一个答案。
标签: c++ parsing token stringstream