Используя заголовочный файл sstream в C++
Поэтому я пытался использовать istringstream для анализа текстового файла. Идея состоит в том, чтобы разбить каждую строку на пробел и на основе подстроки делать вещи. Код работает нормально, за исключением двух вещей: он дважды подсчитывает последнюю подстроку для каждой строки и вызывает ошибки, когда завершает чтение файла. Я не использовал sstream раньше, так что любое понимание будет полезно.
file.getline(str,80);
while(!file.eof())
{
cout<<str<<endl;
istringstream iss(str);
while (iss)
{
iss >> sstr;
cout << "Substring: " <<sstr << endl;
}
file.getline(str,80);
}
2 ответа
while
Циклы должны идти так:
std::string line;
while (std::getline(file, line))
{
std::istringstream iss(line);
std::string token;
while (iss >> token)
{
cout << "Substring: " << token << endl;
}
}
getline
и операции ввода возвращают объект потока, который сам по себе имеет специальное преобразование в bool, которое указывает, была ли операция выполнена успешно, и он потерпит неудачу точно, когда вы достигнете конца соответствующего потока.
while !eof
почти всегда неправильно.
Переключитесь на другую книгу по C++ и скажите нам, какую книгу вы сейчас используете, чтобы мы могли посмеяться и предупредить соответственно.
while (file.getline(str,80)) {
cout<<str<<endl;
istringstream iss(str);
while (iss >> sstr) {
cout << "Substring: " <<sstr << endl;
}
}