Инициализация вектора из текстового файла

Я пытаюсь написать программу, которая может читать текстовый файл и сохранять каждое слово в нем как запись в векторе строкового типа. Я уверен, что я делаю это очень неправильно, но я так долго пытался это сделать, что забыл, как это делается. Любая помощь с благодарностью. Заранее спасибо.

Код:

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

using namespace std;

int main()
{
vector<string> input;
ifstream readFile;

vector<string>::iterator it;
it = input.begin();

readFile.open("input.txt");

for (it; ; it++)
{
char cWord[20];
string word;

word = readFile.get(*cWord, 20, '\n');

if (!readFile.eof())
{
input.push_back(word);
}
else
break;
}

cout << "Vector Size is now %d" << input.size();

return 0;
}

2

Решение

Один из многих возможных способов прост:

std::vector<std::string> words;
std::ifstream file("input.txt");

std::string word;
while (file >> word) {
words.push_back(word);
}

оператор >> заботится только о прочитанных словах, разделенных пробелами (включая новые строки).


И в случае, если вы будете читать его по строкам, вам также может понадобиться явно обрабатывать пустые строки:

std::vector<std::string> lines;
std::ifstream file("input.txt");

std::string line;
while ( std::getline(file, line) ) {
if ( !line.empty() )
lines.push_back(line);
}
6

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

#include <fstream>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
vector<string> input;
ifstream readFile("input.txt");
copy(istream_iterator<string>(readFile), {}, back_inserter(input));
cout << "Vector Size is now " << input.size();
}

Или короче:

int main()
{
ifstream readFile("input.txt");
cout << "Vector Size is now " << vector<string>(istream_iterator<string>(readFile), {}).size();
}

Я не собираюсь объяснять, потому что в StackOverflow уже около тысячи объяснений 🙂

4

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