我想找到5个字符串中最常见的字符,我想到了这一点,我已经为我的ocasion s中的特定字符做过,但我怎样才能为每个字符创建它,它只是我的代码的一部分
Ch是指针!!!
for(i = 0; i < five; i++){
ch = strchr(cities[i], 's');
if (ch != NULL){ //if this is true
ch1++;
printf("exists in %s\n", cities[i]); //print
}
else
{
printf ("doesnt exist in %s\n", cities[i]); //print
}
}
printf("The character 's' appears in %d cities\n", ch1);
答案 0 :(得分:1)
你必须以某种方式存储某个地方每个角色的出现次数。
给定一个提示是保持一个变量存储字符的最大出现次数和字符本身。没有其他的。对于循环,您需要考虑从a
到z
的所有字符。
代码将类似于:-(只有当你觉得你已经尝试了足够的时候看看。)
为了让您了解此代码的作用 - 它会计算最大城市数量中出现的字符数。如果存在平局,则首先选择较小的字母(按字典顺序)。
for( char c = 'a'; c <= 'z';c++){ int ch1 = 0, mxch1 = 0; char mch='?'; for(i = 0; i < numOfCities; i++){ ch=strchr(cities[i],c); if( ch ){ printf("Exist in %s\n",cities[i]); ch1++; } else printf("Doesn't Exist in %s\n",cities[i]); } if( ch1 > mch1) { mch1 = ch1; mch = c; } printf("The character %c appears in %d cities\n",c,ch1); } printf("Character which occured in max number of cities is %c %d",mch,mch1);
最常见字符的代码会有所不同。
int charMap[26]={0}; for(size_t i = 0; i < numOfCities; i++){ for(size_t j = 0; cities[i][j]; j++) charMap[cities[i][j]-'a']++; } int mx = 0; mxi = 0; for(size_t i = 0; i < sizeof(charMap)/sizeof(charMap[0]); i++){ if(charMap[i]>mx){ mx = charMap[i]; mxi = i; } printf("Character which occured max number of times is %c %d", (char)(mxi+'a'),mx);
答案 1 :(得分:0)
如果输入严格仅由ASCII字符组成,则可以使用count sort在O(n)时间复杂度和O(1)空间复杂度中完成此任务。
保留一个数组int count[128] = {0};
,用于跟踪每个字符出现的时间。您可以使用数组的索引作为字符的ASCII值。
for(int i = 0; i < 5; i++)
for(int j = 0; cities[i][j] != '\0'; j++)
count[cities[i][j]]++;
如果您想忽略非图形字符,或者您只想计算字母数字字符或任何您的要求,则必须使用正确的函数组合添加if
项检查(isalpha
来自ctype.h
isalnum
等)
您现在必须运行count
数组并找到最大的数字。找到最大数字的索引是最常见字符的ASCII值。