标题:求助,单词排序(命令行参数)
只看楼主
wyk17231105
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-1-1
结帖率:0
已结贴  问题点数:20 回复次数:2 
求助,单词排序(命令行参数)
【问题描述】
编写一个程序,从一个文件中读入单词(即:以空格或回车换行分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件中。
【输入形式】
源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
#include<stdio.h>
#include<string.h>

int main(int argc, char *argv[])
{
    //FILE*in=fopen(argv[1],"r");
    //FILE*out=fopen(argv[2],"w");
    FILE *in=fopen("sort.in","r");  //调试时
    FILE *out=fopen("sort.out","w");
    char A[101][20]={0};
    char *p[100], *tmp;
    int i=0, j=0, n;
    for (i=0; i<100; ++i)
        p[i] = A[i];
    for (n=0; n<100&&(fscanf(in,"%s",p[n])==1); ++n) NULL;
    for (i=0; i<n-1; ++i)//泡排序将所有单词排序
    {
        for (j=i+1; j<n; ++j)
        {
            if (strcmp(p[j],p[i]) == -1)
            {
                tmp = p[i];
                p[i] = p[j];
                p[j] = tmp;
            }
        }
    }
    tmp = A[n];
    for (i=0; i<n; ++i)
    {
        if (strcmp(p[i], tmp) != 0)
        {
            tmp = p[i];
            printf("%s ", p[i]);
            fprintf(out, "%s ", p[i]);
        }
    }
    fclose(in);
    fclose(out);
    return 0;
}
2018-01-01 23:05
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
得分:10 
很久没上来了,我的想法是这样的。
一个char数组,当前输入字符-'a'相当于下标,值++,计算该字符的数目。
不停getchar,以'\n'为结束,排除空格。如接收到'c',则数组a[ 'c' - 'a' ]++;
最后遍历数组的前26个单元,发现非0则循环输出a[i]+'a'字符a[i]次。以下代码
程序代码:
#include <stdio.h>

#define MAX 28
#define INPUT a[MAX-1]

int main(int argc, char **argv)
{
    int i ,flag = 0;
    char a[MAX] = {0};
    do{
        INPUT = getchar();
        if(INPUT != ' '){
            a[((int)INPUT - 'a')]++;
        }
    }while(INPUT != '\n');

    for(i = 0 ; i < 26 ; i++){
        if(a[i] != 0){
            if(flag != 0){
                printf("%c",' ');
            }
            do{
                printf("%c",i+'a');
                a[i]--;
            }while(a[i] != 0);
            flag = 1;
        }
    }
    return 0;
}



没看清题目,原来还需要读文件,排重复

[此贴子已经被作者于2018-1-2 10:22编辑过]

2018-01-02 10:18



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




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

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