字符统计算法(改进版)
前面那篇关于字符统计的算法只能找出出现次数最多的一个字符,对于“aaabbb”这些有2个或以上的出现次数最多的情况无法全部找出来,于是做了一下改进,解决了这个问题。现在的算法并没有增加时间复杂度,但增加了空间复杂度。有什么问题欢迎交流。
1 #include <stdio.h> 2 #include <string.h> 3 4 5 //要统计的字符串 6 char *s = "abbbbccddddeeeegikgvvbdful697574999999eeeebrykjty478559454hhsdf"; 7 8 9 int main(void) 10 { 11 int len,i,n=0; 12 int char_count; 13 14 //字符串中每个字符出现的次数,最多能表示128种字符(7位ASCII码) 15 char times[128]={0}; 16 //存放出现次数最多的字符 17 char max_count_char[128]; 18 19 char_count = 0; 20 //字符串长度 21 len = strlen(s); 22 23 //统计字符串各个字符出现的次数 24 for(i=0;i<len;i++) 25 times[s[i]]++; 26 27 //找出字符串中出现次数的最大值 28 for(i=0;i<128;i++) 29 { 30 if(times[i] > char_count) 31 char_count = times[i];//出现次数,始终保存当前出现次数的最大值 32 } 33 34 //找出有几个出现次数最大的字符 35 for(i=0;i<128;i++) 36 { 37 //与出现次数的最大值比较 38 if(times[i] == char_count) 39 { 40 //相等则保存该字符 41 max_count_char[n] = (char)i; 42 n++; 43 } 44 } 45 46 //打印所有出现次数最多的字符 47 for(i=0;i<n;i++) 48 printf("出现最多的字符是:%c ,出现的次数为:%d次\n",max_count_char[i],char_count); 49 50 return 0; 51 }
运行效果: