计算字符串中最常见的字符

Sla*_*y88 1 c string function

我有一个复杂的C程序,我只想写一个函数,它获取一个字符串作为参数.

int most_frequent(char *string)
Run Code Online (Sandbox Code Playgroud)

该函数必须返回字符串中最常用字符的编号.我试过这样的事情,但这是不正确的我认为:

 int most_frequent(char *string){
     int i, lenght;
     lenght=strlen(string);
     int max=0, x=0;
     for(i=0;i<lenght;i++)
     {
         if(string[i]==string[i++])
         {
             x++;
         }
         if(max<x)
             max=x;
     }
     return max;
 }
Run Code Online (Sandbox Code Playgroud)

例如:"溢出" - 2"十一" - 3

Bru*_*hen 5

我假设你有一个遵循ASCII的字符串.这样,每个char有256个可能的值.因此,我们计算每个的频率并返回最大的频率.

int most_frequent(char *string){
     int count[256] = {0}; // Assum char is ASCII
     int max = 0;
     int i;

     for(i=0; i < strlen(string) ;i++) {
         count[(unsigned char)(string[i])] ++;
     }

     for(i=0; i < 256 ;i++) {
         if (count[i] > max) 
             max = count[i];
     }
     return max;
 }
Run Code Online (Sandbox Code Playgroud)

  • `(int)`强制转换不会阻止[这个问题](/sf/ask/3495207691/#comment86879059_49931538)并没有什么用处.一个`(unsigned char)`演员会有所帮助. (2认同)