我试图在一个字符串中找到字符频率,我写了下面的代码,但它没有显示任何输出.所有即时尝试是用各自的计数填充字符数组.
当我尝试调试时,它有些如何提供输出,但打印一些垃圾值.
#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)
您的代码中几乎没有问题:
count 数组未初始化.
您正在整数数组上应用strlen().
count数组应为256(count[256])以覆盖所有可能的ascii字符.例如,如果您的输入是100 ,那么您abcd将超出数组的d范围.
您打印错误的计数:
printf("%d\n",count[i]); 应该 printf("%d\n",count[var[i]]);
为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.