试图打开文件并逐字复制它与矢量

时间:2016-01-07 22:15:44

标签: c++

我正在尝试打开文件并逐字逐句阅读。我无法弄清楚我的问题在哪里,因为它在打开文件后似乎崩溃了。

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

using namespace std;

int main()
{
    string path, test;
    ifstream inputFile;
    vector<string> words;

    cout << "What is the path for the input file? ";
    getline(cin, path);
    inputFile.open(path, ios::in);
    while (!inputFile.eof())
    {
        cin >> test;
        words.push_back(test);
    }
    for (int i = 0; i < words.size(); i++)
    {
        cout << words.at(i) << endl;
    }
    inputFile.close();
    return 0;
}

3 个答案:

答案 0 :(得分:4)

while (!inputFile.eof())
{
    cin >> test;
    words.push_back(test);
}

这里有两个问题:

  1. 您已打开inputFile,但后来尝试阅读std::cin

  2. “while(!inputFile.eof())”is always the wrong thing to do.

  3. 嗯,这里还有第三个问题:

    1. 使用调试器会立即发现两个问题。作为一个例子,我将编译后的代码加载到调试器中并逐步完成。问题很明显。

答案 1 :(得分:3)

@Sam拥有你做错的所有事情。

但是使用循环的另一种方法就是使用迭代器来构建数组。

std::ifstream   file(path);
std::vector<std::string>   words(std::istream_iterator<std::string>(file), 
                                 std::istream_iterator<std::string>());

要打印出来,您可以使用复制。

std::copy(std::begin(words), std::end(words),
          std::ostream_iterator(std::cout, "\n"));

目前,这将使用空格作为单词之间的分隔符来破坏单词。这意味着标点符号等将包含在单词中。请看这里有关如何将标点符号作为空格处理:How to tokenzie (words) classifying punctuation as space

答案 2 :(得分:0)

感谢大家的帮助。这是最终的代码(适用于将来最终使用谷歌搜索的人)

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

using namespace std;

int main()

{
string path, test;
ifstream inputFile;
vector<string> words;


cout << "What is the path for the input file? ";

getline(cin, path);

inputFile.open(path, ios::in);


while (inputFile >> test)
{

    words.push_back(test);
}

for (int i = 0; i < words.size(); i++)
{
    cout << words.at(i) << endl;

}

inputFile.close();

return 0;
}