c语言对字符串本身进行排序,对文本中的字符串进行排序(C语言)

对文本中的字符串进行排序,文本中一行一个字符串。#include

#include

#define Limt 100 /*一行文本的最大长度*/

#define Maxlen 10000

#define Maxline 1000

char string[Maxlen]; /* 存放所有的字符串*/

char *linesp[Maxline]; /* 指针数组,每一个元素如 linesp[i] 存放string[]中不同字符串的首地址*/

int getline(char s[], int max);

void str_order( char *v[], int n);

void writelines(char *v[], int n);

void swap(char *a, char *b);

int readlines(char *linesp[], int max);

int main()

{

int nlines; /*字符串的总的个数(行数)*/

if((nlines = readlines(linesp,Maxline)) <= 0) {

printf("Error");

}

else {

str_order(linesp, nlines);

writelines(linesp, nlines);

}

return 0;

}

/******* 函数的功能*******/

/**读入一行文本(包括'\n')到s[]中,最后以'\0'结束,返回字符串的长度'\n'也算在内**/

/**若文本长度超过s[]的最大长度则丢弃超过的长度,s[]最后以'\0'结束,返回长度max-1(即'\0'所在的位置)**/

int getline(char s[], int max)

{

int i, c;

for(i=0; i< max-1 && (c = getchar()) != EOF && c != '\n'; i++)

s[i] = c;

if(c == '\n')

s[i++] = c;

s[i] = '\0';

return i;

}

/*** 将字符串数组 t 复制到 字符串数组m 中 ***/

void strcpy( char *s, char *t)

{

while(*s++ = *t++);

}

/***将文本行存放在 string[Maxlen] 中,返回文本的行数 ***/

/*** linesp[Maxline] 每一个元素如 linesp[i] 为string[]中不同字符串的首地址 **/

int readlines(char *linesp[], int max)

{

char s[Limt]; /* 存放临时读入的一行字符串*/

int len; /* 一行文本的长度 */

int nlines = 0;

char *p = string; //&&

while( (len = getline(s,Limt)) > 0 ) {

if( nlines >= Maxline || (Maxline + string - p) < 0 ) {

return -1;

}

else {

s[len-1] = '\0';

strcpy( p, s);

linesp[nlines++] = p;

p = p + len;

}

}

return nlines;

}

/***比较字符串的大小***/

int strcmp(char *s, char *t)

{

int i=0;

while(*s == *t)

if(*s == '\0')

return 0;

return *s - *t;

}

/*** 交换两个地址用数组的方法交换 v[]的首地址给形参,

**实参和形参指向同一段内存,在函数中改变形参,实参也随之改变

void swap(char *v[], int i, int j)

{

char *temp=0;

temp = v[i];

v[i] = v[j];

v[j] = temp;

} *//*** 交换两个地址 ***/

/*** 传递给函数的的是字符串地址的地址:swap(&v[j-1],&v[j]),*a 即*&v[j-1]还是一个指针,指向一个地址***/

void swap(char **a, char **b)

{

char *temp=0;

temp = *a;

*a = *b;

*b = temp;

}

/**** 最字符串数组进行排序 ****/

void str_order( char *v[], int n)

{

int i, j;

for(i=n;i>0;i--)

for(j=i;j>0;j--) {

if( strcmp( v[j-1], v[j] )>0 )

swap(&v[j-1],&v[j]);

}

}

/****将字符行按顺序输出****/

void writelines(char *v[], int n)

{

int i;

for(i=0; i < n; i++)

printf("%s\n",v[i]);

getchar();

}互相学习,共同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值