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

C++命令行字符串处理程序求助:重复词与词频统计功能

解决思路与完整代码实现

别担心,新手阶段找不到清晰资料太正常了!我来一步步帮你把需求落地——咱们要做的是一个能通过管道接收输入、根据命令行参数输出不同结果的C++程序,结合你已经搞定的词频统计功能,咱们来补全剩下的逻辑。

核心步骤拆解

首先明确咱们的程序要支持两种用法:

  1. 统计词频:echo "你的输入字符串" | ./your_program -c
  2. 输出重复单词:echo "你的输入字符串" | ./your_program -d

1. 处理命令行参数

C++程序通过argc(参数数量)和argv(参数数组)获取命令行参数,咱们首先要判断用户传的是-c还是-d,还要处理参数错误的情况。

2. 从标准输入读取内容

因为是通过echo管道传输入,所以咱们要从stdin(标准输入)读取所有文本,再分割成单个单词。这里用std::cin配合>>运算符就很方便,它会自动跳过空格、换行等空白符,直接读取单词。

3. 结合已有词频逻辑实现不同输出

  • 若参数是-c:直接输出你已经实现的词频统计结果
  • 若参数是-d:遍历词频统计的容器,只输出出现次数大于1的单词

完整示例代码

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main(int argc, char* argv[]) {
    // 第一步:检查命令行参数是否合法
    if (argc != 2) {
        cout << "用法错误!请使用:echo \"输入内容\" | ./程序名 -c 或 -d" << endl;
        return 1;
    }

    string option = argv[1];
    if (option != "-c" && option != "-d") {
        cout << "无效参数!仅支持 -c(统计词频)和 -d(输出重复单词)" << endl;
        return 1;
    }

    // 第二步:读取输入并统计词频(整合你已实现的逻辑)
    unordered_map<string, int> wordCount;
    string word;
    // 从标准输入读取所有单词
    while (cin >> word) {
        // 如果需要忽略大小写,可以取消下面注释转成小写
        // for (char& c : word) c = tolower(c);
        wordCount[word]++;
    }

    // 第三步:根据参数执行不同逻辑
    if (option == "-c") {
        cout << "词频统计结果:" << endl;
        for (const auto& pair : wordCount) {
            cout << pair.first << ": " << pair.second << endl;
        }
    } else if (option == "-d") {
        cout << "重复出现的单词:" << endl;
        for (const auto& pair : wordCount) {
            if (pair.second > 1) {
                cout << pair.first << endl;
            }
        }
    }

    return 0;
}

测试方法

  1. 编译代码(假设保存为word_tool.cpp):
    g++ word_tool.cpp -o word_tool

  2. 测试词频统计:
    echo "hello world hello apple world banana" | ./word_tool -c
    输出会是:

词频统计结果:
hello: 2
world: 2
apple: 1
banana: 1
  1. 测试重复单词输出:
    echo "hello world hello apple world banana" | ./word_tool -d
    输出会是:
重复出现的单词:
hello
world

小提示

  • 如果需要忽略单词的大小写(比如把"Hello"和"hello"当成同一个单词),可以取消代码里转小写的注释。
  • 如果要处理带标点的单词(比如"hello,"),可以额外写一个函数去除首尾的非字母字符,让统计更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:32