從 C 中的 txt 檔案計算字串中出現的次數(0-9)
我創建了從檔案中讀取字串并將其保存為變數“line”的部分
我的想法是創建一個包含 10 個元素的表,該表的開頭為 0,例如,如果我發現 2 個 0 的數字,它將 table[1] 更改為 2,或者如果它找到 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 != '\0'; 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;
}
uj5u.com熱心網友回復:
由于數字的計數不能為負數,因此最好使用元素型別 unsigned int 宣告陣列。您還需要用零初始化陣列。
例如
unsigned int table[10] = { 0 };
在回圈中時,您可以計算字串中的數字。例如
for ( const char *p = line; *p != '\0'; 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] );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445065.html
