从文本文件初始化矢量

时间:2013-09-22 18:41:32

标签: c++ string file-io vector formatted-input

我正在尝试编写一个可以读入文本文件的程序,并将其中的每个单词存储为字符串类型向量中的条目。我确信我这样做是非常错误的,但是自从我试图做到这一点以来,我已经忘记了它是如何完成的。任何帮助是极大的赞赏。提前谢谢。

代码:

#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 个答案:

答案 0 :(得分:6)

许多可能的方法之一很简单:

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);
}

答案 1 :(得分:4)

#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的解释了:)