我正在尝试打开文件并逐字逐句阅读。我无法弄清楚我的问题在哪里,因为它在打开文件后似乎崩溃了。
#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;
}
答案 0 :(得分:4)
while (!inputFile.eof())
{
cin >> test;
words.push_back(test);
}
这里有两个问题:
您已打开inputFile
,但后来尝试阅读std::cin
“while(!inputFile.eof())”is always the wrong thing to do.
嗯,这里还有第三个问题:
答案 1 :(得分:3)
但是使用循环的另一种方法就是使用迭代器来构建数组。
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;
}