我有一个复杂的C
程序,我只想写一个函数,它将一个字符串作为参数。
int most_frequent(char *string)
该函数必须返回字符串中最常用字符的编号。我试过这样的事情,但我认为这是不正确的:
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;
}
例如:“溢出” - 2 “十一” - 3
答案 0 :(得分: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;
}
答案 1 :(得分:2)
请执行以下操作:
// version that ignores the upper and lower case
int most_frequent(char *string) {
int letterCout[26];
// counts occurrence of each letter
for (int i = 0; i < strlen(string); ++i){
// this counts characters if you are ignoring the case (upper or lower)
if (string[i] >= 'a' && string[i] =< 'z')
alphabet [string[i] - 'a']++;
else if (string[i] >= 'A' && string[i] =< 'Z')
alphabet [string[i] - 'A']++;
}
// finds which letter occurred the most
int max = 0;
for (int i = 0; i < strlen(string); ++i)
if (letterCoutn[i] > max)
max = letterCount[i];
return max;
}
或者你可以这样做:
// version which does not ignore case but count the separately
int most_frequent(char *string) {
int letterCout[52]; // 52 so you can count upper and lower case
// counts occurrence of each letter
for (int i = 0; i < strlen(string); ++i){
if (string[i] >= 'a' && string[i] <= 'z')
alphabet [string[i] - 'a' + 26]++; // plus 26 so to offset in array so upper case could be counted in lower half of an array.
else if (string[i] >= 'A' && string[i] <= 'Z')
alphabet [string[i] - 'A']++;
}
// finds which letter occurred the most
int max = 0;
for (int i = 0; i < strlen(string) * 2; ++i)
if (letterCoutn[i] > max)
max = letterCount[i];
return max;
}