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

C++统计字符串数组重复单词次数存入map时代码报错如何解决

问题排查与修复方案

报错根因

  • 函数形参string list[]会自动退化为std::string*指针类型,指针属于C++基础类型,不存在begin()、end()成员方法,直接调用这两个方法就会触发编译报错。
  • 代码未使用传入的数组长度参数n,数组没有自带长度信息,必须通过传入的n控制遍历边界。

修复代码

方案1:下标遍历(易读性更高)

int countWords(string list[], int n)
{
    map <string, int> mp;
    for(int i = 0; i < n; i++){
        mp[list[i]]++;
    }
    int res = 0;
    for(auto val = mp.begin(); val != mp.end(); val++){
        if(val->second == 2) res++;
    }
    return res;
}

方案2:迭代器风格遍历(保留原有写法逻辑)

int countWords(string list[], int n)
{
    map <string, int> mp;
    // 指针本身支持迭代器运算,直接用指针计算遍历边界
    for(auto val = list; val != list + n; val++){
        mp[*val]++;
    }
    int res = 0;
    for(auto val = mp.begin(); val != mp.end(); val++){
        if(val->second == 2) res++;
    }
    return res;
}

注意事项

  • 两种方案均完全保留原有逻辑,仅修改了数组遍历部分的错误代码,统计恰好出现2次的单词数量的功能不受影响。
  • 如果是在C++11及以上版本编译,也可以用范围for简化map的遍历写法,代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:03