C 带指针的2d数组中最常用的字符

C 带指针的2d数组中最常用的字符,c,pointers,frequency,C,Pointers,Frequency,我想为5个字符串找到最常用的字符,我想到了这一点,在我的ocasion中,我已经为一个特定的字符找到了它,但是我如何才能为每个字符找到它,它只是我代码的一部分 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]

我想为5个字符串找到最常用的字符,我想到了这一点,在我的ocasion中,我已经为一个特定的字符找到了它,但是我如何才能为每个字符找到它,它只是我代码的一部分

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);
(i=0;i<5;i++)的
{
ch=strchr(城市[i],'s');
如果(ch!=NULL){//如果这是真的
ch1++;
printf(“存在于%s\n”,城市[i]);//打印
}
其他的
{
printf(“不存在于%s\n”,城市[i]);//打印
}
}
printf(“字符“s”出现在%d个城市中\n”,ch1);

您必须以某种方式将每个字符的出现次数存储在某个位置

有了这个提示,将保留一个变量来存储字符和字符本身的最大出现次数。没有别的了。对于循环,你需要考虑所有的字符从<代码> a <代码> >代码> z < /代码> .< 代码类似于:-(只有在您觉得已经尝试了足够的时候才查看)

为了让您了解此代码的作用-它计算最大城市数中出现的字符数。如果出现平局,它会首先选择较小的字母表(按字典顺序)

for(charc='a';cmch1){
mch1=ch1;
mch=c;
}
printf(“字符%c出现在%d个城市中\n”,c,ch1);
}
printf(“出现在最大城市数中的字符为%c%d”,mch,mch1)

最常用字符的代码将有所不同

int charMap[26]={0};
对于(大小i=0;imx){
mx=charMap[i];
mxi=i;
}
printf(“最大出现次数为%c%d的字符,(char)(mxi+'a'),mx);

如果输入严格由ASCII字符组成,则可以使用以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]]++;  
for(int i=0;i<5;i++)
对于(int j=0;城市[i][j]!='\0';j++)
计数[城市[i][j]++;
如果您想忽略非图形字符,或者只想计算字母数字字符或任何您可能需要的字符,则必须添加一个
If
检查,检查功能组合是否正确(
isalpha
isalnum
,等等)


现在,您必须运行
计数
数组并找到最大的数字。找到最大数字的索引是最常用字符的ASCII值。

正确格式化代码并创建一个最小但完整的示例有助于我们更好地帮助您。此代码与查找任何字符串中最频繁的字符,仅限指定的字母是否存在于字符串中…查找最频繁的字符需要完全不同的代码,唯一保持不变的部分是首字母“for”…我不知道你可以将其用于(char c='a';c@amoutzasretzios.:奇怪的是,你知道你使用整个东西的方式…我的意思是,这基本上是在计算最大城市数中出现的字符。希望这有助于一个弱编译器将调用
strlen()
多次O(len*len)和
for(size\t j=0;j
对于(大小j=0;城市[i][j];j++)…
将使用O(len)工作完成相同的功能。@chux是的,就是这样。我首先将其编辑为
len=strlen()
然后循环
len
,但这也会调用
strlen
几次,如果我们按照您所展示的那样做,这是可以避免的。选择不错。
for(int i = 0; i < 5; i++)
    for(int j = 0; cities[i][j] != '\0'; j++)
         count[cities[i][j]]++;  
for(int i = 0; i < 5; i++)
    for(int j = 0; cities[i][j] != '\0'; j++)
         count[cities[i][j]]++;