C 给定一个由字母和数字组成的字符串,找出给定字符串中每个数字的频率

C 给定一个由字母和数字组成的字符串,找出给定字符串中每个数字的频率,c,frequency,digits,C,Frequency,Digits,请告诉我代码中有什么错误输出为00000000。 我知道有些错误,但找不到 #include <stdio.h> #include <string.h> int main() { int c=0; char s[100]; fgets(s, 100, stdin); printf("%s", s); for(int i=0;i<=9;i++) { for(int j=0;j<str

请告诉我代码中有什么错误输出为00000000。
我知道有些错误,但找不到

#include <stdio.h>
#include <string.h>

int main()
{
     int c=0;
     char s[100];
     fgets(s, 100, stdin);
     printf("%s", s);
     for(int i=0;i<=9;i++)
     {
         for(int j=0;j<strlen(s);j++)
         {
             if(s[j]==i){
                 c++;
            }           
         }
         printf("%d", c);
     }

    return 0;
}
#包括
#包括
int main()
{
int c=0;
chars[100];
fgets(s,100,stdin);
printf(“%s”,s);

对于(int i=0;i首先,您正在比较一个字符和一个int。请查看解决方案


然后,我会记得“0”是ASCII表中的索引48,而不是0:

关键问题是
s[j]==I
。它将字符串的
char
char
'0'
'9'
之间的值进行比较

另一个是
c
未在每个循环中重置为零


不要循环10次,而是测试
char
是否为数字


您没有调用
j而是在这一行中出错了“if(s[j]==i)”,并且您没有创建任何单独的数组来存储数字的频率,如果您使用单个变量进行频率计数,那么它将显示字符串频率的累计值

您可以将is代码作为参考

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *s;
    s = malloc(1024 * sizeof(char));
    scanf("%s", s);
    s = realloc(s, strlen(s) + 1);
    int len = strlen(s), i;
    int arr[10];
    for(i = 0; i < 10; i++)
        arr[i] = 0;
    for(i = 0; i < len; i++) {
        if(s[i] >= '0' && s[i] <= '9') {
            arr[(int)(s[i] - '0')]++;
        }
    }
    for(i = 0; i < 10; i++)
        printf("%d ", arr[i]);
    printf("\n");
    free(s);
    return 0;
}
#包括
#包括
#包括
int main()
{
char*s;
s=malloc(1024*sizeof(char));
scanf(“%s”,s);
s=realloc(s,strlen(s)+1;
int len=strlen(s),i;
int-arr[10];
对于(i=0;i<10;i++)
arr[i]=0;
对于(i=0;i如果(s[i]>='0'和&s[i]循环的另一个样式选择:
for(char*t=s;*t;+++t)
。然后在使用
s[i]
的地方在循环体中使用
*t
。我不会费心使用值
48
。所有真实世界的字符集(包括标准主题字符集)将数字放在一个连续的集合中,从
0
开始并递增。因此,从任何数字中减去
'0'
,就会得到数字等价物(
'0'-'0'
->
0
'1'-'0'>
1
'9'-'0'
->
9
)。这也是C标准中对兼容执行字符集的要求。
for (size_t i=0; s[i]; i++) {
for (size_t i=0; s[i] != '\0'; i++) {
for (size_t i=0; s[i] != 0; i++) {
 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *s;
    s = malloc(1024 * sizeof(char));
    scanf("%s", s);
    s = realloc(s, strlen(s) + 1);
    int len = strlen(s), i;
    int arr[10];
    for(i = 0; i < 10; i++)
        arr[i] = 0;
    for(i = 0; i < len; i++) {
        if(s[i] >= '0' && s[i] <= '9') {
            arr[(int)(s[i] - '0')]++;
        }
    }
    for(i = 0; i < 10; i++)
        printf("%d ", arr[i]);
    printf("\n");
    free(s);
    return 0;
}