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

C++统计行内变位词程序无法进入for循环问题求助

问题根因分析

直接导致for循环不执行的核心原因是参数传递错误:

  • breakStringToWords函数的第二个参数vector<string> w是值传递,函数内部操作的是实参的副本,main函数里的vectorv不会被写入任何内容,所以sz = v.size()结果永远是0,for(int i=0; i<sz; i++)的循环条件永远不成立,自然不会进入循环。

全量问题修复方案

1. 修复split函数参数传递问题

将函数的vector参数改为引用传递,保证修改会同步到main函数的实参:

// 参数w前加&改为引用传递
void breakStringToWords(string str, vector<string>& w)
{
    istringstream ss(str);
    string word;
    while (ss >> word)
    {
        w.push_back(word);
    } 
}

2. 修复for循环数组越界问题

当前循环逻辑中isAnagram(v[i - 1], v[i])当i=0时会访问v[-1],属于数组越界,会触发未定义行为。如果要统计相邻单词的变位词对数,循环应该从i=1开始:

for(int i=1; i<sz; i++)

3. 修复变位词判断逻辑错误

当前的isAnagram实现仅校验了y的所有字符都在x中出现过,没有校验字符出现次数、也没有判断两个字符串长度是否相等,会出现大量误判,比如"aab"和"ab"会被误判为变位词。正确的实现可以直接排序两个字符串后比较:

bool isAnagram(string x, string y)
{
    if(x.size() != y.size()) return false;
    sort(x.begin(), x.end());
    sort(y.begin(), y.end());
    return x == y;
}

4. 修复输入行单词累加问题

main函数里的vectorv定义在while循环外,每次处理新的输入行时不会清空之前的单词,会导致统计结果错误,建议把v的定义移到while循环内部,或者每次调用breakStringToWords之前执行v.clear()。


内容的提问来源于stack exchange,提问作者Ростислав Русев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:01