EncountersAgain 2021-09-24 01:17 采纳率: 66.7%
浏览 88
已结题

用c语言解决问题,并附上代码注释

img

img

  • 写回答

2条回答 默认 最新

  • 广大菜鸟 2021-09-24 02:01
    关注
    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. #include<string.h>
    4. #include<memory.h>
    5. void strlen_pro(const char*str){
    6. int size = strlen(str);//strlen()用来计算指定的字符串s 的长度,不包括结束字符”\0”
    7. //chArray和occurArray按顺序对应出现的字符和它对应的频数,相对于字典dict[ch]=num
    8. char*chArray = (char*)malloc(sizeof(char)*size);//字符数组
    9. int*countArray=(int*)malloc(sizeof(int)*size);//频数数组
    10. // char*occurCharArray=(char*)malloc(sizeof(char)*size);
    11. char occurCharArray;//表示第一个出现最高频率的字符,其实可以不用上面的字符数组保存所有的相同最高频率的字符,只需要保存第一个
    12. memset(countArray,-1,sizeof(int)*size);//全部频数置为-1,其实也可以不用,习惯初始化下数组比较好
    13. // count表示字符-频数组合的个数,in是代表bool型,表示判断字符是否在字符-频数组合里出现,没有就加上
    14. // maxTime表示字符-频数组合内最大的频数
    15. // time表示字符-频数组合内字符对应的频数
    16. // resultCount表示最终结果的个数
    17. // 思路:先遍历一遍,获取每个字符的频数,再对频数遍历一边,判断出最多频数和为这个频数值的所有字符
    18. int i,j,count=0,in=0,maxTime=0,time=0,resultCount=0;
    19. char ch;
    20. for(i=0;i<size;i++){
    21. ch = str[i];
    22. in = 0;
    23. for(j=0;j<count;j++){
    24. if(chArray[j]==ch){
    25. in=1;
    26. countArray[j]+=1;
    27. break;
    28. }
    29. }
    30. if(in==0){
    31. chArray[j]=ch;
    32. countArray[j]=1;
    33. count+=1;
    34. }
    35. }
    36. resultCount=1;
    37. maxTime=countArray[0];
    38. //occurCharArray[0]=chArray[0];
    39. occurCharArray=chArray[0];
    40. for(i=1;i<count;i++){// 根据字符-频率排序
    41. time=countArray[i];//出现频率
    42. if(time>maxTime){
    43. // 出现比当前最大频数还大的频数,之前的数组没用了,需要重新填充,
    44. // 但是不需要全部清空再填充,只需要用resultCount记录数组有效位置个数
    45. maxTime=time;
    46. resultCount=1;
    47. //occurCharArray[0]=chArray[i];
    48. occurCharArray=chArray[i];
    49. }else if(time==maxTime){
    50. //occurCharArray[resultCount]=chArray[i];
    51. resultCount+=1;
    52. }
    53. }
    54. if(resultCount==1)
    55. printf("%d %c\n",size,occurCharArray);
    56. //printf("%d %c\n",size,occurCharArray[0]);
    57. else
    58. printf("%d They are too many!!!\n",size);
    59. free(countArray);
    60. free(chArray);
    61. //free(occurCharArray);
    62. }
    63. int main(){
    64. char str[1000];
    65. scanf("%s",str); //abcde
    66. strlen_pro(str);
    67. system("pause"); // 这个是因为我用vscode,它不加这句会闪退
    68. return 0;
    69. }

    img

    img

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月24日
  • 已采纳回答 9月24日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
  • ¥15 距离软磁铁一定距离的磁感应强度大小怎么求
  • ¥15 霍尔传感器hmc5883l的xyz轴输出和该点的磁感应强度大小的关系是什么
  • ¥15 vscode开发micropython,import模块出现异常
  • ¥20 Excel数据自动录入表单并提交
  • ¥30 silcavo仿真,30分钟,只需要代码
  • ¥15 FastReport 怎么实现打印后马上关闭打印预览窗口
  • ¥15 利用3支股票数据估计其均值和方差的95%置信区间。
  • ¥15 微信小程序运行一项功能时,弹出未知错误弹框,检查代码没有问题
  • ¥15 ATAC测序生成self-pseudo replicates之前是否要进行去线粒体reads
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部