我一直在努力阅读有书籍格式的文件。该文件被一个看起来像这样的字符串分成页面“------------------------------------ ---”。我要做的是阅读所有单词并跟踪每个单词的页码和单词编号,文件看起来像这样
例如,如果单词“hello”出现在第一页中,它将看起来像“hello 1,1”,因为它是第一页上的第一个单词,如果单词出现在第二页中,输出将是“hello” 2,1" 这是我到目前为止的代码
ifstream inFile;
inFile.open("GreatExpectations.txt");
if(!inFile.is_open()) {
cout << "Error, can't open the file....."<<endl;
return 1;
}
string word;
string separator;
separator = "----------------------------------------";
int pageNum = 0, wordNum = 0;
IndexMap myMap(200000);
string title;
for(int i = 0; i < 2; i++) {
getline(inFile, title);
cout << title <<endl;
}
while(!inFile.eof())
{
inFile >> word;
//cout << word << " ";
wordNum++;
if(word == separator)
pageNum++;
}
答案 0 :(得分:0)
如果我很清楚你的问题是我解决问题的方法:
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;
struct WordInfo {
string word;
int pageNum;
int wordNum;
};
int main() {
ifstream inFile;
inFile.open("GreatExpectations.txt");
if(!inFile.is_open()) {
cout << "Error, can't open the file....."<<endl;
return 1;
}
int pageNum = 1, wordNum = 0;
vector<WordInfo> words; // container for words with informations
// read the file line-by-line
for(string line; getline(inFile, line);) {
// detect the page separator which is a line from hyphens only
if(line.find_first_not_of("-") == string::npos) {
pageNum++;
wordNum = 0;
continue;
}
// process the line word-by-word
stringstream ss(line);
for(string word; getline(ss, word, ' ');) {
wordNum++;
words.push_back({ word, pageNum, wordNum });
}
}
return 0;
}
WordInfo
结构将根据您的需要保存一个单词的信息。逐行读取文件并不是最佳但更简单,因此有两个循环:第一个读取一行,第二个读取该行的单词。如果读取一个单词,它将被推入words
向量以供以后使用。就是这样。