2013-09-22 19 views
2

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

代码:

#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

这从来没有被问 – sehe

+0

以前我是一种缺失的问题这个问题。当您尝试当前的代码时会出现什么问题?此外,规范的一部分缺失。是否每个单词都保证在你档案中的单独一行中? – us2012

+0

是否有理由使用数组'cWord'来存储单词,而您可以直接读入'word'变量? –

回答

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

我不打算去解释,因为在计算器上有,却有无数的解释已经:)

+2

不要试图成为一个脾气暴躁的老家伙,但是如果已经有了数十亿的解释,那么正确的做法是否将这个标记为重复? – us2012

+1

@ us2012是的。但是写出来会更快。一个万亿的复制品令人遗憾地暗示着五十万个不好的例子,我不想筛选。但是,请随时关闭! – sehe

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