|
读入两个文件(str1.txt str2.txt)中的内容(均只含一串字符),存入一数组中排序再写入一个新创建的文件(newstr.txt)中
排序,写入,都没问题,可是读入的时候,需要加 i-=1(下面有标明的~),如果不加,两次读写完后都会在末尾多出一个随即字符,比如若str1中是qwert,str2.txt中是asdfg,那么不加i-=1的话,写入的结果是:
××ADEFGQRSTW(×代表随即字符,调试时显示的是一个类似加了音标的小y)
即一开始存入数组的是QWERT×ASDFG×
#include <stdio.h>
#define NAMELEN 10
#define F_NAMELEN 10
#define STRLEN 100
#define NULL 0
void main()
{
FILE *fp;
int i=0,j,min,temp,length;
char ch,allstr[STRLEN],r1[F_NAMELEN],r2[F_NAMELEN],w1[F_NAMELEN];
printf("Input File1(str1.txt) please\n=> ");//输入要读入的第一个文件的名字
scanf("%s",r1);
if ((fp=fopen(r1,"r"))==NULL)
{
printf("File open failed\n");
exit(0);
}
while(!feof(fp))
allstr[i++]=fgetc(fp);
i-=1;//不加的话,末尾会多一个随机字符,为什么?是判断条件不对吗?
printf("Input File2(str2.txt) please\n=> ");//输入要读入的第二个文件的名字
scanf("%s",r2);
if ((fp=fopen(r2,"r"))==NULL)
{
printf("File open failed\n");
exit(0);
}
while(!feof(fp))
allstr[i++]=fgetc(fp);//将文件中的字符存入数组,进行排序
allstr[i-1]='\0';//这里也必须用i-1
length=strlen(allstr);
for (i=0;i<length-1;i++) //对字符排序
{
for (min=i,j=i+1;j<length;j++)
if (allstr[j]<allstr[min])
min=j;
if (min!=i)
{
temp=allstr[i];
allstr[i]=allstr[min];
allstr[min]=temp;
}
}
printf("Input new file name(NewStr.txt) please\n=> ");
//输入要写入的文件的名字
scanf("%s",w1);
if ((fp=fopen(w1,"w"))==NULL)
{
printf("File open failed\n");
exit(0);
}
i=0;
while(allstr[i])
fputc(allstr[i++],fp);
fclose(fp);
}
|
|