编程要求
文件a.txt
中包含各种字符,但只有数字字符是有效的,提取其中的数字字符,将每3
个数字组成一个整数,写到文件b.txt
中,每个整数之间用一个空格分开。读取过程中,如果a.txt
中最后剩下不到3
个数字字符,则将剩下的1
个或者2
个数字字符组成一个整数。
例如:
a.txt
中的内容是1j3j5sd0msd454ss3msd563
,则抽取出来写入文件b.txt
的内容应该是135 45 435 63
(第二个整数是由045
三个数字组成,所以是45
)。
测试输入:
q12h44h67k854ksd923823sf83wd38457sd433ds,
预期输出:
124 467 854 923 823 833 845 743 3
测试输入:
1212121212343434343445454545450000005656565665dfsd455
预期输出:
121 212 121 234 343 434 344 545 454 545 0 0 565 656 566 545 5
代码实现
//main.cpp
#include <stdio.h>
#include <stdlib.h>
extern void extractDigit();
int main()
{
FILE* fp = fopen("a.txt", "w");
if (NULL == fp)
{
perror("ERROE!!!\n");
return 0;
}
char s[1000] = { 0 };
fgets(s, 999, stdin);
fputs(s, fp);
fclose(fp);
extractDigit();
FILE* f = fopen("b.txt", "r");
if (f == NULL)
return 0;
int n, k = 0;
(void)fscanf(f, "%d", &n);
while (!feof(f))
{
k++;
printf("%d ", n);
if (k % 10 == 0)
printf("\n");
(void)fscanf(f, "%d", &n);
}
if (k % 10 != 10)
printf("\n");
return 0;
}
//filetxt.cpp
#include <stdio.h>
void extractDigit();
char readADigit(FILE* fi)
{
char c = fgetc(fi);
if (c == EOF)
return EOF;
while (c > '9' || c < '0')
{
c = fgetc(fi);
if (c == EOF)
return EOF;
}
return c;
}
void extractDigit()
{
FILE* fi = fopen("a.txt", "r");
FILE* fo = fopen("b.txt", "w");
if (fi == NULL || fo == NULL)
return;
char c = 0;
int num = 0, k = 0;
c = readADigit(fi);
while (c != EOF)
{
num = num * 10 + c - '0';
k++;
if (k == 3)
{
fprintf(fo, "%d ", num);
k = 0;
num = 0;
}
c = readADigit(fi);
}
if (k != 0)
{
fprintf(fo, "%d ", num);
}
fclose(fi);
fclose(fo);
}