Следующая строка кода неверна:
while ((pos = tempLine.find(delimiter2)) != string::npos) {
token = tempLine.substr(0, pos);
storeTokenPairs.push_back(token);
line.erase(0, pos + delimiter2.length()); // <-- HERE
}
Вы никогда не изменяете tempLine
, поэтому цикл выполняется бесконечно, если в tempLine
.
обнаружен
delimiter2
.
Вам нужно заменить line
на tempLine
вместо:
tempLine.erase(0, pos + delimiter2.length());
В качестве альтернативы вам вообще не нужно изменять tempLine
, так как 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);
}