Я новичок в языке C ++, и я искал четкий ответ на мою проблему, но безрезультатно. Что я пытаюсь сделать, это получить substr
значение строки, которая является одной строкой в текстовом файле. Когда я запускаю такую компиляцию, я получаю первые двенадцать букв предложения, и у меня нет проблем с этим:
a[count] = sentence.substr(0,12);
но когда я пытаюсь изменить pos
от 0
к любому другому значению, например:
a[count] = sentence.substr(1,12);
Я получаю ошибку:
прекращение вызова после выброса экземпляра std :: out_of_range
what (): basic_string :: substr: _pos (который равен 1) this -> size () (который равен 0)
Я проверил это с YT и онлайн-гидами, и ни у кого не было проблем с substr
,
Есть идеи?
РЕДАКТИРОВАТЬ:
Извините за причину путаницы. Это часть кода:
string sentence;
string a[10000];
string next_line[10000];
main()
{
int count = 1;fstream file;
file.open("converted.txt",ios::in);
while(!file.eof())
{
getline(file, line);
next_line[count] = line;
sentence = next_line[count];
a[count] = sentence.substr(1,12);
count++;
}
}
От feof
Этот индикатор обычно устанавливается предыдущий операция в потоке
который пытался прочитать в конце файла или после него.
Это означает, что вы прочитали еще один ряд, до того, как условие было ложным.
Этот ряд был пустой.
От зиЬзЬг
Подстрока — это часть объекта, которая начинается с символа
позиция pos и символы len (или до конца строки,
что наступит раньше).
Так что если вы использовали substr
с первым параметром 0 все было в порядке, оно было пропущено. Но если вы передали 1 в качестве первого параметра, который был больше, чем строка, содержащая символы, было сгенерировано исключение.
Вот правильное чтение из файла
#include <iostream>
#include <fstream>
using namespace std;
string sentence;
string a[10000];
string next_line[10000];
int main()
{
int count = 1;
std::string line;
fstream file;
file.open("test.txt",ios::in);
while(getline(file, line))
{
next_line[count] = line;
sentence = next_line[count];
a[count] = sentence.substr(1,12);
count++;
}
}
Других решений пока нет …