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

C++如何读取指定文件的所有唯一单词存入数组并展示

现有代码问题说明
  1. 你申请的char数组只有100字节,文件内容超过100字节就会触发数组越界,导致未定义行为
  2. while(my_file.eof()==0)的判断逻辑错误,eof()标记是在读完最后一个有效字符后才会置为true,会导致多读一个无效字符写入数组
唯一单词识别实现思路
  • 第一步:将文件内容分割为独立单词,默认以空格、换行、制表符等空白符作为单词分隔符,可按需扩展标点等其他分隔符
  • 第二步:使用C++标准库自带去重能力的容器存储单词,std::set<std::string>或std::unordered_set<std::string>都可以,插入元素时会自动过滤重复值,最终容器内留存的就是所有唯一单词
  • 第三步:遍历容器输出结果即可
完整实现代码

不需要先把全部内容读入char数组,C++的文件流用>>读取std::string时默认就会按空白符分割单词,简化实现逻辑:

#include <iostream>
#include <fstream>
#include <string>
#include <unordered_set>

using namespace std;

int main() {
    // unordered_set自动去重,查找插入效率更高
    unordered_set<string> unique_words;
    string word;
    fstream my_file("name.txt");
    if (!my_file) {
        cout << "No such file" << endl;
        return 1;
    }
    // 直接按单词读取,自动跳过空白分隔符
    while (my_file >> word) {
        // 可选:如果不需要区分大小写,可在此处将word统一转成小写/大写再插入
        unique_words.insert(word);
    }
    my_file.close();

    // 输出所有唯一单词
    cout << "唯一单词列表:" << endl;
    for (const auto& w : unique_words) {
        cout << w << endl;
    }
    return 0;
}

如果你必须基于已读入char数组的内容做单词分割,只需要遍历数组,遇到分隔符时就把之前积累的字符作为一个单词插入去重容器,清空临时字符串后继续遍历即可。

可选优化点
  • 不需要区分大小写识别时,插入容器前统一把单词转成全大写或全小写
  • 需要过滤单词首尾标点时(例如把hello,处理为hello),插入容器前清理掉单词首尾的非字母/数字字符

内容的提问来源于stack exchange,提问作者Mitul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:24:03