#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 101
int cmp(const void* a, const void* b) {
return strcmp(*((char**)a), *((char**)b));
}
int main() {
//创建一个动态数组
char* SubString[MAX] = {NULL};
SubString[0] = (char*)malloc(sizeof(char) * MAX);
scanf("%s", SubString[0]);
//这是串长,也是子串总个数
int Length = strlen(SubString[0]);
//接下来将所有的子串都存下来
for (int i = 1; i < Length; i++) {
//动态分配了内存
SubString[i] = (char*)malloc(sizeof(char) * MAX);
strcpy(SubString[i], SubString[0] + i);//从 SubString[0] 字符串的第 i 个字符开始,复制剩余的字符串到 SubString[i] 指向的新分配的内存中
}
//将SubString中所有的字符串都进行排序
qsort(SubString, Length, sizeof(char*), cmp);
//将所有子串输出
for (int i = 0; i < Length; i++)
printf("%s\n", SubString[i]);
//一定要注意,将所有的动态分配的部分都释放
for (int i = 0; i < Length; i++) {
free(SubString[i]);
}
return 0;
}