当我运行程序时,输出窗口打印出“!Loading Data …”这一行,但它似乎无休止地陷入循环。据我所知,while循环设置正确,但在……之后
以下代码行是错误的:
while ((pos = tempLine.find(delimiter2)) != string::npos) { token = tempLine.substr(0, pos); storeTokenPairs.push_back(token); line.erase(0, pos + delimiter2.length()); // <-- HERE }
你永远不会修改 tempLine ,所以如果循环无休止地运行 delimiter2 发现于 tempLine 。
tempLine
delimiter2
你需要更换 line 同 tempLine 代替:
line
tempLine.erase(0, pos + delimiter2.length());
或者,您实际上不需要修改 tempLine 作为 find() 将可选的起始索引作为输入:
find()
size_t start = 0, pos; while ((pos = tempLine.find(delimiter2, start)) != string::npos) { token = tempLine.substr(start, pos-start); storeTokenPairs.push_back(token); start = pos + delimiter2.length(); } if (start < tempLine.length()) { token = tempLine.substr(start); storeTokenPairs.push_back(token); }