后缀子串排序
转自:https://www.cnblogs.com/liangrx06/p/5083933.html
题目描述
对于一个字符串,将其后缀子串进行排序,例如grain 其子串有: grain rain ain in n 然后对各子串按字典顺序排序,即: ain,grain,in,n,rain
输入描述:
每个案例为一行字符串。
输出描述:
将子串排序输出
示例1
输出
复制ain grain in n rain
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 1000 int cmp(const void *a, const void *b) { return strcmp((char *)a, (char *)b); } int main(void) { int i, j, k, n; char s[N][N]; while (scanf("%s", s[0]) != EOF) { n = strlen(s[0]); for(i=1; s[0][i]; i++) { k = 0; for(j=i; s[0][j]; j++) s[i][k++] = s[0][j]; s[i][k] = '\0'; } qsort(s, n, sizeof(s[0]), cmp); for(i=0; i<n; i++) printf("%s\n", s[i]); } return 0; }
//难点在于排序,没想到一个qsort就搞定了。头文件stdlib.h。
它的参数为: 1 待排序数组首地址
2 数组中待排序元素数量(改题目中也就是字符串的长度)
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序(排序规则,从大到小还是从小到大)