如何逐字阅读文件并找到每个单词的位置?

时间:2013-11-04 18:02:49

标签: c++ string file file-io getline

我正在尝试逐字读取文件并对每个单词执行一些实现。将来我想知道每个单词的位置在哪里。位置是该行中的行号和字符位置。如果字符位置不可用,我只需要知道当我到下一行时我正在读文件。这是我现在的示例代码:

string tmp;
while(fin>>tmp){
     mylist.push_back(tmp);
}

我需要知道鳍何时进入下一行?!

2 个答案:

答案 0 :(得分:1)

解决此问题的一种简单方法是使用std::getline,运行自己的计数器,并使用额外的string stream将行内容拆分为单词,如下所示:

string line;
int line_number = 0;
for (;;) {
     if (!getline(fin, line)) {
         break;
     }
     istringstream iss(line);
     string tmp;
     while (iss >> tmp) {
         mylist.push_back(tmp);
     }
     line_number++;
}

答案 1 :(得分:1)

“我需要知道鳍何时进入下一行”

使用stream的运算符>>无法实现。您可以逐行读取输入并使用临时istringstream对象分别处理每一行:

std::string line, word;
while (std::getline(fin, line)) {

    // skip empty lines:
    if (line.empty()) continue;


    std::istringstream lineStream(line);
    for (int wordPos = 0; lineStream >> word; wordPos++) {
        ...
        mylist.push_back(word);
    }
}

不要忘记#include <sstream>