строка — ошибка C ++ substr out_of_range

Я новичок в языке 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++;
}

}

-4

Решение

От 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++;
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]