0

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

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

我需要知道 fin 什么时候去下一行?!

4

2 回答 2

1

解决此问题的一种简单方法是使用,运行您自己的计数器,并使用附加字符串流std::getline将行的内容拆分为单词,如下所示:

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++;
}
于 2013-11-04T18:07:59.817 回答
1

“我需要知道 fin 什么时候去下一行”

这对于流的 operator 是不可能的>>。您可以逐行读取输入并使用临时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>

于 2013-11-04T18:10:47.347 回答