You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多行文件的每行读取单词?C++代码实现疑问

文件读取与单词提取的正确实现

你的代码存在几个关键问题,直接运行既读不完所有行,也提取不出一行里的全部单词,我给你修正并解释清楚:

代码里的错误点

  • getline(file, line)只执行了一次,只能读取文件的第一行,无法遍历所有行
  • istringstream ss(word)初始化参数错误,应该传入整行内容line,而非未赋值的word
  • ss >> 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:30:41