【C】按字符串长度排序

来源:互联网 发布:杭州银行卡 知乎 编辑:程序博客网 时间:2024/06/07 08:17

按字符串长度排序可以分为以下三个步骤:

  1. 读取所有输入行

  2. 对文本进行排序

  3. 按次序打印文本行

代码如下:

#include <stdio.h>#include <string.h>#include <malloc.h>#define MAXLEN 1000char *alloc(int);int getline(char *p,int n);//读取一行字符int readline(char *lineptr[],int maxlines);//读取所有输入行void qsort(char *lineptr[],int left,int right);//对字符串进行排序void writeline(char *lineptr[],int lines);//打印void swap(char *lineptr[],int i,int j);//交换指针int main(){    char *p[100];    int i;    i = readline(p,100);    //swap(p,0,1);    qsort(p,0,i-1);    writeline(p,i);    //printf("%s",p[1]);    printf("%d\n",i);       return 0;} int getline(char s[],int n){    int i;    int c;    for(i=0;i<n-1&&(c=getchar())!='\n'&&c!=EOF;i++)        s[i]=c;    if(c=='\n')    {        s[i]=c;        i++;    }    s[i] ='\0';     return  i;}int readline(char *lineptr[],int maxlines){    int len,nlines;    char *p;    char line[MAXLEN];    nlines = 0;    while((len = getline(line,MAXLEN)) >0 )        if(nlines >= maxlines || (p = (char*)malloc(len)) == NULL)  //p=alloc[len]ÉêÇëÄÚ´æ¿Õ¼ä             return -1;        else        {            line[len-1]='\0';       //ɾ³ýÁË»»Ðзû            strcpy(p,line);            lineptr[nlines++] = p;        }    return nlines;  }void writeline(char *lineptr[],int lines){    int i=0;    for(i=0;i<lines;i++)        printf("%s\n",lineptr[i]);}void qsort(char *lineptr[],int left,int right){    int i,last;     if(left>=right)        return ;    swap(lineptr,left,(left+right)/2);    last = left;    for(i=left+1;i<=right;i++)        //if(strcmp(lineptr[i],lineptr[left])<0)            if(strlen(lineptr[i])<strlen(lineptr[left]))//比较字符串长度            swap(lineptr,++last,i);    swap(lineptr,left,last);    qsort(lineptr,left,last-1);    qsort(lineptr,last+1,right);}void swap(char *lineptr[],int i,int j){    char *temp;    temp = lineptr[i];    lineptr[i]=lineptr[j];    lineptr[j] = temp;}

运行结果:
这里写图片描述

0 0
原创粉丝点击