比如输入一下 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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 孟德尔随机化结果不一致
- ¥15 深度学习残差模块模型
- ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
- ¥15 差动电流二次谐波的含量Matlab计算
- ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
- ¥15 C#如何调用串口数据
- ¥15 MATLAB与单片机串口通信
- ¥15 L76k模块的GPS的使用
- ¥15 请帮我看一看数电项目如何设计
- ¥23 (标签-bug|关键词-密码错误加密)