在字符串中查找字符频率

sim*_*lue 1 c arrays pointers

我试图在一个字符串中找到字符频率,我写了下面的代码,但它没有显示任何输出.所有即时尝试是用各自的计数填充字符数组.

当我尝试调试时,它有些如何提供输出,但打印一些垃圾值.

#include<stdio.h>
/* Program for printing character frequency in string */
charcount(char *,int *);
int main()
{
    int n,i=0;
    printf("Enter n :");
    scanf("%d",&n);
    char var[n];
    int count[100];                    // array for storing character frequency   
    printf("Enter string :");
    fflush(stdin);
    scanf("%s",var);
    charcount(var,count);             // calling frequeny function
    for(i=0;i<strlen(count);i++)
    {
       printf("%d\n",count[i]);                         
    }
    getch();
    return 0;
}

 charcount(char *p,int *q)
 {
    for(;*p;p++)
    {
       q[*p]++;         
    }            
 }
Run Code Online (Sandbox Code Playgroud)

P.P*_*.P. 6

您的代码中几乎没有问题:

  1. count 数组未初始化.

  2. 您正在整数数组上应用strlen().

  3. count数组应为256(count[256])以覆盖所有可能的ascii字符.例如,如果您的输入是100 ,那么您abcd将超出数组的d范围.

  4. 您打印错误的计数:

    printf("%d\n",count[i]); 应该 printf("%d\n",count[var[i]]);

  5. 为charcount()声明适当的原型.

修好后:

#include<stdio.h>
/* Program for printing character frequency in string */
void charcount(char *,int *);
int main()
{
    int n,i=0;
    printf("Enter n :");
    scanf("%d",&n);
    char var[n];
    int count[256]={0};                    // array for storing character frequency   
    printf("Enter string :");
    scanf("%s",var);
    charcount(var,count);             // calling frequeny function
    for(i=0;i<strlen(var);i++)
    {
       printf("%d\n",count[var[i]]);                         
    }
    return 0;
}

void  charcount(char *p,int *q)
 {
    for(;*p;p++)
    {
       q[*p]++;         
    }            
 }
Run Code Online (Sandbox Code Playgroud)

确保以C99或C11(例如gcc -std=c99 file.c)模式进行编译,因为早期的C标准不支持VLA.