标题:求助,单词排序(命令行参数)
取消只看楼主
wyk17231105
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-1-1
结帖率:0
已结贴  问题点数:20 回复次数:0 
求助,单词排序(命令行参数)
【问题描述】
编写一个程序,从一个文件中读入单词(即:以空格或回车换行分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件中。
【输入形式】
源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为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;
}
搜索更多相关主题的帖子: 单词 排序 sort out temp 
2018-01-01 16:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483877-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.860323 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved