如何从多行文件的每行读取单词?C++代码实现疑问
文件读取与单词提取的正确实现
你的代码存在几个关键问题,直接运行既读不完所有行,也提取不出一行里的全部单词,我给你修正并解释清楚:
代码里的错误点
getline(file, line)只执行了一次,只能读取文件的第一行,无法遍历所有行istringstream ss(word)初始化参数错误,应该传入整行内容line,而非未赋值的wordss >> word只提取了一个单词,一行里多个单词的话只会统计第一个
修正后的完整代码
#include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std; int main() { ifstream file("your_file.txt"); // 替换成你的目标文件名 if (!file.is_open()) { // 必须检查文件是否成功打开 cerr << "无法打开文件" << endl; return 1; } string line, word; int totalWords = 0; // 循环读取每一行,直到文件结束 while (getline(file, line)) { // 将整行内容转为字符串流,方便按单词拆分 istringstream ss(line); // 循环提取流中的每个单词(>>会自动跳过空格、制表符等分隔符) while (ss >> word) { totalWords++; } } file.close(); cout << "总单词数:" << totalWords << endl; return 0; }
关键参数解释
getline(file, line):第一个参数是打开的文件流file,第二个是存储每行内容的字符串line。每次调用读取一行(直到换行符)存入line,读到文件末尾时返回false,循环终止。istringstream ss(line):把整行字符串line包装成输入流,这样就能像操作cin一样用>>提取单词,>>会自动忽略单词间的空白符(空格、换行、制表符都算)。ss >> word:从字符串流中提取一个单词存入word,成功提取时返回流本身(逻辑值为true),流中无更多单词时返回false,以此控制内层循环结束。
内容的提问来源于stack exchange,提问作者aloo_q
相关产品推荐
相关产品推荐

