新人刚学文件操作有一题请教大佬
这个代码要求编写函数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),要修改的代码如下...
#include <stdio.h>
// 函数extractDigit的功能:从文件a.txt中提取数值写入文件b.txt中
void extractDigit();
// 请在此添加代码,实现extractDigit函数
// 函数extractDigit的功能:从文件a.txt中提取数值写入文件b.txt中
void extractDigit()
{
FILE *fi = fopen("a.txt","r");// 以读的方式打开文件a.txt
FILE *fo = fopen("b.txt","w");// 以写的方式打开文件b.txt
if(fi==NULL || fo==NULL)// 如果某个文件打开失败,则返回
return;
/**************Begin******************/
char c;
while((c=fgetc(fi))!=EOF)
{
if(c>'1'&&c<'9')
{
fputc(c,fo);
}
}
/**************End********************/
fclose(fi);// 关闭文件fi
fclose(fo);// 关闭文件fo
}
新手小白太难了,我知道这种题对大佬来说没什么难度,但求指教。
void extractDigit()
{
FILE *fi = fopen("a.txt", "r");
FILE *fo = fopen("b.txt", "w");// 以写的方式打开文件b.txt
if (fi == NULL || fo == NULL)// 如果某个文件打开失败,则返回
return;
/**************Begin******************/
char c;
int i = 0;
while ((c = fgetc(fi)) != EOF)
{
if (c >= '0'&&c <= '9')
{
i++;
if (c != '0')fputc(c, fo);
if ((i % 3) == 0) fputc(' ', fo);
}
}
/**************End********************/
fclose(fi);// 关闭文件fi
fclose(fo);// 关闭文件fo
} 北冰羊 发表于 2020-11-30 17:25
void extractDigit()
{
FILE *fi = fopen("a.txt", "r");
对不起,这个不对,还不能删,。。。略过,略过 北冰羊 发表于 2020-11-30 17:25
void extractDigit()
{
FILE *fi = fopen("a.txt", "r");
大佬你这里差一点啊,比如测试输入:
q12h44h67k854ksd923823sf83wd38457sd433ds,
预期输出:
124 467 854 923 823 833 845 743 3
但你这个输出不了最后的3了 北冰羊 发表于 2020-11-30 17:39
对不起,这个不对,还不能删,。。。略过,略过
可以修改原来的帖子哦{:10_334:} #include <stdio.h>
#include <ctype.h>
void main(){
FILE *fi = fopen("a.txt","r");// 以读的方式打开文件a.txt
FILE *fo = fopen("b.txt","w");// 以写的方式打开文件b.txt
char c='\0';
int i=0;
while(!feof(fi)){
c=fgetc(fi);
if(0!=isdigit(c)){
if(i==3){
fputc(' ',fo);
i=0;
}
if((i!=0)||(c!='0'))fputc(c,fo);
i++;
}
}
fclose(fi);
fclose(fo);
}
北冰羊 发表于 2020-11-30 17:25
void extractDigit()
{
FILE *fi = fopen("a.txt", "r");
好吧兄弟是我们的平测系统有问题,你的答案对了{:5_99:} 根据上面的答案修改了以下,而且我做的实训要求测试输入:
1212121212343434343445454545450000005656565665dfsd455
预期输出:
121 212 121 234 343 434 344 545 454 545
0 0 565 656 566 545 5
void extractDigit()
{
FILE *fi = fopen("a.txt", "r");
FILE *fo = fopen("b.txt", "w");// 以写的方式打开文件b.txt
if (fi == NULL || fo == NULL)// 如果某个文件打开失败,则返回
return;
/**************Begin******************/
char c,s,a;
int i = 0;
while (!feof(fi))
{
c=fgetc(fi);
if(c=='0' && i!=0)
i++;
if(c=='0' && i==0)
{
c=fgetc(fi);
i++;
if(c=='0')
{
i++;
c=fgetc(fi);
if(c=='0')
{
fputc('0',fo);
i++;
}
}
}
if (c >'0'&&c <= '9')
{
fputc(c,fo);
i++;
}
if(i==3)
{
fputc(' ',fo);
i=0;
}
}
fputc(' ',fo);
/**************End********************/
fclose(fi);// 关闭文件fi
fclose(fo);// 关闭文件fo
}
页:
[1]