求助,单词排序(命令行参数)
【问题描述】编写一个程序,从一个文件中读入单词(即:以空格或回车换行分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件中。
【输入形式】
源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为sort,
源文件名和目标文件名分别为sort.in和sort.out,则命令行为:sort sort.in sort.out。
程序将从当前目录下sort.in文件中读入单词。
【输出形式】
对单词进行排序,删除重复出现的单词,然后将结果输出到文件sort.out中。
【输入样例】
假如sort.in文件内容如下:
rrr sss aaa bbb ccc ddf aaa dd
【输出样例】
sort.out文件内容为:
aaa bbb ccc dd ddf rrr sss
【样例说明】
读入文件sort.in,做适当的排序,并删除重复出现的单词,输出到文件sort.out
下面是我的代码,不知道为啥,评分网站上说,当输入一个单词d时,我的输出是?号。求巨佬帮助
#include<stdio.h>
#include<string.h>
int compare(char a[],char b[])//判断两个单词大小的函数
{
int l1,l2,i=0;
l1=strlen(a);
l2=strlen(b);
for(i=0;(i<l2)&&(i<l1);)
{
if(a[i]<b[i])
{
return -1;
break;
}
else
if(a[i]==b[i])
i++;
else
{
return 1;
break;
}
}
if((i==l1)&&(i==l2))
return 0;
else
if((i==l1)||(i==l2))
if(l1<l2)
return -1;
else
return 1;
}
int main(int argc, char *argv[])
{
FILE*in=fopen(argv[1],"r");
FILE*out=fopen(argv[2],"w");
char temp[1000]={0};
char A[100][20]={0};
int i=0,j=0,k=0,len;
while((temp[i++]=fgetc(in))!=EOF);//读入一整串字符
len=strlen(temp);
i=0;
do
i++;
while((temp[i]==' ')||(temp[i]=='\n'));//分割出每个单词
i--;
for(j=0,k=0;i<len;)
{
if((temp[i]!=' ')&&(temp[i]!='\n'))
A[j][k++]=temp[i++];
else
{
j+=1;
k=0;
do
i++;
while((temp[i]==' ')||(temp[i]=='\n'));
}
}
for(i=0;i<j;i++)//泡排序将所有单词排序
{
for(k=0;k<=(j-i);k++)
if(compare(A[k],A[k+1])<0)
{
strcpy(temp,A[k]);
strcpy(A[k],A[k+1]);
strcpy(A[k+1],temp);
}
}
for(i=j-1;i>=0;i--)//输出单词
{
if(i>=1)
if(compare(A[i],A[i-1])==0)
i=i-1;
fputs(A[i],out);
fprintf(out," ");
} if(j==0)
fputs(A[0],out);
fclose(in);
fclose(out);
return 0;
}