任务描述
本关要求编写函数ext\fractDigit
,该函数从已有的当前目录下的文件a.txt
中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt
中。
其中:文件a.txt
中包含各种字符,但只有数字字符是有效的,提取其中的数字字符,将每3
个数字组成一个整数,写到文件b.txt
中,每个整数之间用一个空格分开。读取过程中,如果a.txt
中最后剩下不到3
个数字字符,则将剩下的1
个或者2
个数字字符组成一个整数。
例如:
a.txt
中的内容是1j3j5sd0msd454ss3msd563
,则抽取出来写入文件b.txt
的内容应该是135 45 435 63
(第二个整数是由045
三个数字组成,所以是45
)。
相关知识(略)
编程要求
本关的编程任务是补全step1/fileTxt.c
文件中ext\fractDigit
函数,以实现使用FILE
结构来操作文本文件的要求。具体要求如下:
-
本关要求通过补全
step1/fileTxt.c
文件中ext\fractDigit
函数来实现从已有的当前目录下的文件a.txt
中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt
中的要求。 -
实际的测试样例参见下文。
测试说明
本关的测试文件是step1/main.c
,其中将会调用你在step1/fileTxt.c
文件中完成的ext\fractDigit
函数来完成本关任务。step1/main.c
的源代码如下所示:
#include <stdio.h>
#include <stdlib.h>
//声明外部函数,函数ext\fractDigit在其它源文件中实现
extern void ext\fractDigit();
int main()
{
//准备文件a.txt的内容
FILE *fp = fopen("a.txt","w"); //打开文件a.txt用于写
char s[1000];
fgets(s, 999, stdin); //从键盘读取一行字符
fputs(s,fp); //将这一行字符写入文件a.txt中
fclose(fp); //关闭fp关联的文件a.txt
ext\fractDigit(); //调用函数,抽取数字写入文件b.txt中
FILE *f = fopen("b.txt","r"); //以读的方式打开文件b.txt
if(f==NULL) //打开失败则返回
return 0;
int n,k=0;
fscanf(f,"%d",&n); //从文件b.txt中读出一个整数到变量n中
while(!feof(f)) //如果文件没结束(读出的不是EOF)
{
k++;
printf("%d ",n); //输出该整数到屏幕
if(k%10==0) //每十组一换行
printf("\n");
fscanf(f,"%d",&n); //读取下一个整数
}
if(k%10!=10) //最后一行没有换行符则补上
printf("\n");
return 0;
}
平台会对你编写的代码进行测试: 测试输入: 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
开始你的任务吧,祝你成功!