чтение файла в C ++ в массив строк повторяет последнее слово

Когда я читаю из моей программы текстовый файл с 5 словами в нем и помещаю в массив с 20 пробелами, последнее слово в моем файле заполняет последние 16 мест в моем массиве. Есть идеи почему? Файл, который я ввожу, будет содержать не более 20 слов.

newArray string[20];
if (inputFile) {
while (i<20) {
inputFile >> word;
if (word.length()<2) {   //gets rid of single character words
i++;
}
else{
newArray[i] = word;
cout<<newArray[i]<< " ";
}

}
inputFile.close();
}

0

Решение

Поправьте меня, если я ошибаюсь, но зачем вам массив из 20 строк для чтения в 5 словах? Код ниже является стандартным способом чтения из файла в массив.

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
string myArray[20];
ifstream file("file.txt");
string word;
if(file.is_open())
{
int i = 0;
while(file>>word)
{
if(word.length()<2)
continue;
else
{
myArray[i] = word;
i++;
}
}
}
}

Приложение: Редактирование будет читать все слова и останавливается, когда больше нет текста. Ваша первоначальная проблема заключалась в том, что файловый поток ничего не читает после прочтения всех 5 слов, поэтому word остается тем же самым, заставляя это заполнять массив.

1

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

Ваш вопрос неясен, но я уверен, что в вашем цикле вы, вероятно, все еще добавляете последнее слово, потому что вы используете цикл while. Вы не выходите из цикла после добавления слов. Вы должны выйти из цикла, если вы находитесь в конце файла, и это должно решить вашу проблему с появлением последнего слова несколько раз.

Лучшим подходом было бы прочитать весь файл в 1 строку, а также токенизировать и добавлять каждое слово за раз в массиве.

Если это не поможет, предоставьте полный код. Также я не понимаю, почему у вас i++ } дважды. Это опечатка?

Надеюсь это поможет.

редактировать: попробуйте этот код:

int i = 0;
string line;
ifstream myfile("names.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
arr[i] = line;
i++;
}
myfile.close();
}

Вы не добавите ни одной строки после

1