计算 C 中 txt 文件中字符串中出现的次数 (0-9)

Count number (0-9) occurrences in a string from a txt file in C

计算 C 中 txt 文件中字符串中出现的次数 (0-9)

我创建了从文件中读取字符串并将其保存为变量“line”的部分

我的想法是创建一个包含 10 个元素的 table,这些元素的开头是 0,例如,如果我找到 2 个数字 0,它会更改 2 中的 table[1] 或者如果它找到 1 个 9 将 table[10] 更改为 1 但无法实现它

字符串“456 890 111111”的输出应该是:

数字 1 出现 6 次
数字 1 出现 1 次
...

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


int main()
{
    char line[255];
    int table[10];
    FILE *f = fopen("input.txt", "r");

    fgets(line, 255, f);
    printf("String read: %s\n", line);

    fclose(f);
    return 0;
}

更新代码:

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


int main()
{
    char line[255];
    unsigned int table[10] = { 0 };
    FILE *f = fopen("input.txt", "r");

    fgets(line, 255, f);
    printf("String read: %s\n", line);

    int n=0;

    for ( char *p = line; *p != '[=11=]'; p++ )
    {
        if ( '0' <= *p && *p <= '9' ) {
            ++table[*p - '0'];
        }

    }


    fclose(f);
    for (int i=0; table[i] < 10; i++) {
        printf("Number", i, "apears", table[i], "times");
    }

    return 0;
}

由于数字的计数不能为负数,因此最好将数组声明为元素类型为unsigned int。您还需要用零初始化数组。

例如

unsigned int table[10] = { 0 };

在循环中,您可以计算字符串中的数字。例如

for ( const char *p = line; *p != '[=11=]'; ++p )
{
    if ( '0' <= *p && *p <= '9' )
    {
        ++table[*p - '0'];
    }
}

所有数字作为字符都是按顺序表示的,没有其他中间符号。

注意数组中的索引是从0开始的。

在你更新了问题中的代码之后,这个for循环

for (int i=0; table[i] < 10; i++) {
    printf("Numarul", i, "apare de", table[i], "ori");
}

不正确。对于初学者来说,这个条件 table[i] < 10 没有意义。并阅读有关 printf.

的文档

至少循环应该是这样的

for ( int i = 0; i < 10; i++ ) 
{
    printf( "Numarul %d apare de %u ori\n", i, table[i] );
}