输入文本排序
对于之前的文本排序方法,通过先输入,后排序,再输出。
我们也可以通过一边输入一遍排序。
即算法为:
读入一行,放在指针数组的第一位。
将新读入的行插入到正确的位置
重复上述的比较插入过程。
输出排好序的指针数组。
先写输出函数。
#include <stdio.h>
void printline(char *s[],int nlines)
{
int i;
for(i=0;i<nlines;i++)
{
printf("%s\n",s[i]);//当为\0的时候输出\n,与前面输入\n保持一致
}
}
再来写插入一个字符串到已有的指针数组正确位置,
#include <stdlib.h>
void insert_sort(char *s[],char *p,int nlines)
{
int i,j;
for(i=0;i<nlines;i++)
{
if(strcmp(p,s[i])<0)
{
break;
}
}
if(i!=nlines)
{
for(j=nlines;j>i;j--)
{
s[j]=s[j-1];
}
}
s[i]=p;
}
直接在main函数中写。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5000
#define MAXLINE 5000
int main(void)
{
char *s[MAXLINE];
char temp[MAXSIZE];
int len,nlines;
nlines=0;
while(nlines<MAXLINE&&(len=getline_1(temp,MAXSIZE))>0)
{
if((p=(char *)malloc(sizeof(char)*len))>0)
{
return -1;
}
else
{
temp[len-1]='\0';
strcpy(p,temp);
if(nlines==0)
{
s[nlines]=p;
}
else
{
insert_sort(s,p,nlines);
}
nlines++;
}
}
printline(s,nlines);
return 0;
}