我正在尝试逐字读取文件并对每个单词进行一些实现。将来我想知道每个单词的位置在哪里。位置是该行中的行号和字符位置。如果字符位置不可用,我只需要在转到下一行时知道何时读取文件。这是我现在拥有的示例代码:
string tmp;
while(fin>>tmp){
mylist.push_back(tmp);
}
我需要知道 fin 什么时候去下一行?!
解决此问题的一种简单方法是使用,运行您自己的计数器,并使用附加字符串流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++;
}
“我需要知道 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>