从c解决任务

时间:2019-04-09 16:04:09

标签: c algorithm sorting

我正在做作业,但是有一些问题

这是任务的文本:

编写一个程序,该程序从名称为命令行第一个参数的文本文件中读取单词,对其进行排序,然后键入(每个单词在单独的行中)到名称为第二个参数命令行的文本文件中。该单词是其他单词中的一个或多个连续字母,并以非符号字母分隔。

从文本文件中读取单词并形成动态单词字符串应在其原型为的函数中执行(通过参数n,必须返回已读单词的数量):

char ** scan (FILE * fin, int * n);

使用插入排序算法对单词进行排序应在其原型为:

的函数中执行。
void sort (char ** array, int n);

在文本文件中输入单词字符串(每个单词在单独的行中)应在其函数中执行 原型:

void print (FILE * fout, char ** array, int n)

代码编译没有错误,但是程序无法正常工作。

这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char** scan(FILE *fin, int *n);
void sort(char **array, int n);
void print(FILE *fout, char **array, int n);

int main(int argc, char *argv[])
{
    FILE *fp,*dat;
    int n;
    char **niz;

    fp=fopen(argv[1],"r");
    dat=fopen(argv[2],"w");

    niz=scan(fp,&n);
    printf("%s", niz[0]);
    sort(niz,n);
    print(dat,niz,n);

    fclose(fp);
    fclose(dat);
    free(niz);
}

char** scan(FILE *fp, int *n)
{
    int c,m=0,g=0;
    char **niz;

    niz=(char**)calloc(1,sizeof(char *));
    niz[0]=(char*)calloc(21,sizeof(char));

    while((c=fgetc(fp)!=EOF))
        {
            if(isalpha(c))
                niz[m][g++]=c;
            else if(niz[m][0]!=0)
                {
                    m++;
                    g=0;
                    niz=(char**)realloc(niz,(m+1)*sizeof(char*));
                    niz[m]=(char*)calloc(21,sizeof(char));
                }
        }
        if(niz[m][0]==0)
            *n=m;
        else *n=m+1;
        return niz;
}
void sort(char **niz, int n)
{
   int i, j;
   for (i=1; i<n; i++)
   {
      char* x=niz[i];
      for (j=i; j>0 && strcmp(x,niz[j-1])<0; j--)
         niz[j]=niz[j-1];
      niz[j]=x;
   }
}
void print(FILE *fout, char **niz, int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        fputs(niz[i],fout);
        fputc(10,fout);
    }
}

0 个答案:

没有答案