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

C++读取文件查找最长单词时如何避免识别标点符号

C++ 查找文件最长单词(过滤标点符号)解决方案

你遇到的问题核心原因是:默认使用>>运算符读取字符串时,仅以空白符作为分隔依据,因此附着在单词前后的标点会被一并计入字符串长度,只需要新增对读取到的字符串的清洗逻辑,过滤掉非单词字符即可,修改后的完整实现如下:

#include <string>
#include <fstream>
#include <iostream>
#include <cctype> // 用于isalpha判断字符是否为字母

using namespace std;

string get_the_longest_word(const string &file_name){
    int max_len = 0; // 避免和标准库max重名,提升兼容性
    string s, longest_word;
    ifstream inputFile(file_name);

    if(inputFile.is_open())
    {
        while(inputFile >> s)
        {
            // 清洗当前字符串,只保留字母
            string cleaned_str;
            for (char c : s) {
                // 如果需要支持带数字的单词,可将判断条件改为isalnum(static_cast<unsigned char>(c))
                // 如果需要支持连字符等特殊单词符号,可自行追加判断条件:|| c == '-'
                if (isalpha(static_cast<unsigned char>(c))) { 
                    cleaned_str += c;
                }
            }
            // 纯标点的内容清洗后为空,直接跳过不参与统计
            if (cleaned_str.empty()) continue;
            
            if(cleaned_str.length() > max_len)
            {
                max_len = cleaned_str.length();
                cleaned_str.swap(longest_word);
            }
        }
        inputFile.close();
    } else {
        cout << "Error while opening the file!!\n";
    }

    return longest_word;
}

核心修改逻辑说明:

  • 新增字符清洗步骤:遍历读取到的每个原始字符串的字符,仅保留符合单词规则的内容,可根据实际需求调整过滤规则
  • 空值过滤:避免纯标点片段被误统计
  • 变量名优化:规避和标准库函数的命名冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:04