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

无需样本数组如何统计字符串数组中各元素的出现次数(入门编程场景)

无需预定义样本数组的字符串出现次数统计方案(C++入门版)

核心实现思路

因为还没学习map、vector等容器,我们可以用基础数组配合临时计数变量实现需求,无需提前准备样本数组:

  • 额外定义两个长度为MAX的数组:一个存已经识别到的不重复字符串,一个存对应字符串的出现次数
  • 新增一个变量记录当前已经统计到的不重复字符串总数
  • 遍历所有待统计的字符串时,先在已有的不重复字符串数组中查找:
    • 找到匹配项就给对应计数+1
    • 没找到匹配项就把该字符串新增到不重复数组末尾,对应计数初始化为1

原有代码问题修正

你现有代码存在数组越界风险:for(int i=0; i<=MAX; i++) 会访问到counter[20],而数组下标范围是0~19,会触发未定义行为。

完整实现代码

#include <iostream>
#include <string>
using namespace std;
#define MAX 20

int main(){
    // 待统计的原始字符串数组,后续可替换为从txt文件读取的车辆信息
    string arr[MAX]={"ABC","AOE","ADC","ABC","ADC","ADC"};
    int arr_len = 6; // 实际存储的有效数据条数,读文件时可以同步统计
    string unique_str[MAX]; // 存不重复的字符串
    int counter[MAX] = {0}; // 对应不重复字符串的计数
    int unique_cnt = 0; // 当前已统计到的不重复字符串数量

    // 遍历所有待统计字符串
    for(int i=0; i<arr_len; i++){
        int found = -1;
        // 去已有的不重复数组中查找是否存在匹配
        for(int j=0; j<unique_cnt; j++){
            if(unique_str[j] == arr[i]){
                found = j;
                break;
            }
        }
        if(found != -1){
            // 找到匹配,计数+1
            counter[found]++;
        }else{
            // 没找到匹配,新增到不重复数组
            unique_str[unique_cnt] = arr[i];
            counter[unique_cnt] = 1;
            unique_cnt++;
        }
    }

    // 输出统计结果
    for(int i=0; i<unique_cnt; i++){
        cout << unique_str[i] << " = " << counter[i] << endl;
    }

    // 若要适配读取txt文件的需求,只需要替换arr数组填充逻辑即可,示例:
    /*
    int arr_len = 0;
    // 循环读取文件内容,直到读满MAX条或者文件结束
    while(arr_len < MAX && getline(cin, arr[arr_len])){
        // 过滤空行(可选)
        if(arr[arr_len].size() > 0) arr_len++;
    }
    */
    return 0;
}

代码说明

  • 所有逻辑仅用到基础数组、循环、判断,符合入门课程的知识点要求
  • 可以适配任意内容的字符串数组统计,不需要提前知道样本内容
  • 预留了读取txt文件的修改入口,替换原始数组填充逻辑即可实现车辆信息统计需求

内容的提问来源于stack exchange,提问作者Omar Munguía

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:03