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

如何使用两个vector打印给定输入字符串中每个单词的出现频率

代码现存问题
  • 容器使用错误且未初始化:你声明了二维vector<vector<string>> strs,实际只需要一维vector存储单词即可,且未给vector分配空间就直接用下标赋值,会触发内存越界直接崩溃。
  • 单词分割逻辑错误:遍历字符串时存在多余的i++操作,且会把空格也计入单词内容,连续空格场景还会生成空的无效单词。
  • 频率统计逻辑错误:
    1. 频率初始值设置有误,匹配到相同单词时重复累加,导致计数偏大
    2. 错误地在内层循环中执行push_back操作,最终frequency数组长度是单词数的平方,和单词下标无法一一对应
  • 哨兵逻辑冗余:不需要额外插入"NULL"作为结束标记,vector自带size()方法可直接获取存储的单词总数。
修正后代码
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() 
{
    // 只用一维vector存单词即可
    vector<string> words;
    string str;
    cout << "Enter your strings" << endl;
    getline(cin, str);
    int len = str.length();
    string cur_word = "";
    
    // 修正后的单词分割逻辑
    for(int i = 0; i < len; i++){
        if(str[i] == ' '){
            // 遇到空格且当前单词非空就存储
            if(!cur_word.empty()){
                words.push_back(cur_word);
                cur_word.clear();
            }
        }else{
            cur_word += str[i];
        }
    }
    // 存入最后一个末尾无空格的单词
    if(!cur_word.empty()){
        words.push_back(cur_word);
    }

    vector<int> frequency;
    // 修正后的频率统计逻辑
    for(int n = 0; n < words.size(); n++){
        int freq = 0;
        for(int m = 0; m < words.size(); m++){
            if(words[n] == words[m]){
                freq++;
            }
        }
        frequency.push_back(freq);
    }

    // 输出和示例格式完全匹配
    for(int x = 0; x < words.size(); x++){
        cout << words[x] << "-" << frequency[x] << endl;
    }
    return 0;
}
验证说明

输入hey hi Mark hi mark时,输出完全符合预期:

hey-1
hi-2
Mark-1
hi-2
mark-1

代码默认区分字符串大小写,符合示例中Mark和mark计数独立的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:57:03