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

如何为字符串去重算法添加重复单词计数器?

给移除重复单词的C代码添加重复计数器解决方案

修改思路

  • 新增count数组存储每个单词的出现次数,初始值设为1(每个单词默认至少出现一次)
  • 在检测重复单词的逻辑中,找到重复项时递增对应单词的计数,同时标记重复的单词为空
  • 最终输出时,同步打印单词及其出现次数

修改后的完整代码

#include <stdio.h>
#include <string.h>

int main()
{
    char str[100], doubleArr[10][30];
    int i = 0, j = 0, k = 0, l = 0, n;
    int count[10] = {0}; // 新增计数数组

    printf("Enter the string\n");
    // 替换gets为fgets避免缓冲区溢出问题
    fgets(str, sizeof(str), stdin);
    // 去掉fgets读取的换行符
    str[strcspn(str, "\n")] = '\0';
    n = strlen(str);

    // 分割字符串到二维数组
    for (i = 0; str[i] != '\0'; i++) {
        if (str[i] == ' ') {
            doubleArr[k][j] = '\0';
            k++;
            j = 0;
        } else {
            doubleArr[k][j] = str[i];
            j++;
        }
    }
    doubleArr[k][j] = '\0';
    k++; // 修正k的值,让它等于单词总数

    // 初始化计数数组,每个单词默认出现1次
    for (i = 0; i < k; i++) {
        count[i] = 1;
    }

    // 检测重复单词并更新计数
    for (i = 0; i < k; i++) {
        // 跳过已经被标记为重复的单词
        if (doubleArr[i][0] == '\0') {
            continue;
        }
        for (l = i + 1; l < k; l++) {
            if (doubleArr[l][0] == '\0') {
                continue;
            }
            if (strcmp(doubleArr[i], doubleArr[l]) == 0) {
                count[i]++;
                // 标记重复单词为空
                doubleArr[l][0] = '\0';
            }
        }
    }

    // 输出结果:单词 + 出现次数
    printf("去重后的单词及出现次数:\n");
    for (i = 0; i < k; i++) {
        if (doubleArr[i][0] != '\0') {
            printf("%s: %d次\n", doubleArr[i], count[i]);
        }
    }

    return 0;
}

关键修改说明

  1. 计数数组初始化:分割完所有单词后,给每个count[i]赋值为1,因为每个单词初始至少出现一次。
  2. 重复检测逻辑优化:把内层循环的起始位置改为i+1,避免重复比较(比如i=0和l=1,不用再比较i=1和l=0),同时跳过已经被标记为空的重复单词,避免重复计数。
  3. 计数更新:每当找到与doubleArr[i]重复的单词时,直接给count[i]加1,然后标记重复单词为空。
  4. 输出优化:同时打印单词和对应的出现次数,结果更清晰。
  5. 安全性修正:替换不安全的gets为fgets,并处理换行符,避免缓冲区溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:37:26