: 。 2021-11-05 22:49 采纳率: 100%
浏览 23
已结题

怎么去统计一个字符串的个个字母的个数啊 ,总数统计我会但是单个就不知道怎么操作了

比如输入一下 abcdddszxcaad求a,b,c个个字母的个数

  • 写回答

2条回答 默认 最新

  • 冷0_O 2021-11-06 00:28
    关注

    你好,代码已经给出,请耐心分析代码中的逻辑,详细注释已经给出,方法多样,我这个只是其中一种,码字不易,望采纳!

    const char * count_char_num(const char * ptr)
    {
        if(NULL == ptr) //空字符串,根本不需要算
            return ptr;
        char *str = (char*)malloc(strlen(ptr)+1);  //记录已经记录过个数的字符,strlen需要调用#include<string.h>
                                                    //strlen求一个字符串的长度,加一是因为strlen没有把字符串最后面的'\0'算进去
        char *left = str;
        char *right = str; //代替str进行循环
        int number = 1; //记录个数,初始化为1是因为计数时第一个出现的字符没有算进去
        const char *pl = ptr;
        const char *pr = ptr + 1;
    
        while(1){
            while(left != right){ //进入是否已经算过的判断语句,注意:第一次并不会进入这个while循环,因为第一次
                                  //str字符串并未存入字符,此时left和right指向的地址是一样的
                if((*left) == (*pl)){
                    if( *(pl+1) == '\0') //如果相等,且已经到了最后一个字符,结束函数
                        return ptr;
                    left = str; //如果相等,但没到最后一个字符,函数继续,left重置便于下次判断
                    ++ pl; //右移,判断下一位
                }
                else
                    ++ left;   //当前不相等,则往下比                          
            }
            //只要出来while函数,即代表存在还未计数的字符
            left = str; //left重置
            pr = pl + 1; 
            
            //还没算过,记录
            (*right) = (*pl);
            ++ right;
    
            //开始计算
            //此时pr=pl+1
            while((*pr) != '\0'){
                if((*pl) == (*pr))
                    ++ number;
                ++ pr;
            }
            printf("%c出现了%d次\n",*pl,number);
            number = 1; //重置number为1
            ++ pl; //右移,当前字符已经计算完毕,继续判断下一个字符
        }
        return ptr;
    }
    
    int main()
    {
        const char * p = "aaccaabbdddbb";
        count_char_num(p);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月5日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)