对文本中的字符串进行排序(C语言)
2014-09-01 15:30
459 查看
对文本中的字符串进行排序,文本中一行一个字符串。
#include <stdio.h> #include <string.h> #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) { <span style="white-space:pre"> </span> char *temp=0; temp = v[i]; <span style="white-space:pre"> </span> v[i] = v[j]; <span style="white-space:pre"> </span> 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(); }
互相学习,共同进步。
相关文章推荐
- C语言 对输入的一个字符串进行排序
- C语言-对输入n个字符串进行排序(无导入string.h)
- 从文件中读入文本,文本内容为几个字符串,用逗号间隔,将其中同时含有字母和数字的字符串去除,留下仅仅只包含字母或数字的字符串,然后进行排序
- C语言-对输入的n个字符串进行排序
- 【C语言】指向指针的指针变量对字符串进行排序
- C语言-动态分配内存对任意个字符串进行排序
- C语言 字符串用指针数组将字符串进行排序
- 按不同国家语言进行字符串排序
- 按任意词或字段对文本数据进行排序或筛选 (LINQ)
- 对字符串中字符出现的次数进行排序
- 用指向指针方法对N个字符串进行排序并输出
- 【摘录】C语言中利用 strtok函数进行字符串分割
- 借用字符串进行无规律排序
- 规则文本数据文件根据关键字段进行排序的实现
- linq 扩展,在查询中使用字符串表达式对结果进行排序
- 输入n个字符串,进行排序,然后从小到大输出
- 把字符串当做数组来处理进行排序
- 一个关于使用c语言进行对文档读取替换特定字符串
- C语言中strtok函数进行分割字符串!
- 借用字符串进行无规律排序