计算 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] );
}
计算 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] );
}