#include <stdio.h> #include "stdlib.h" #include "string.h" #include <time.h> char* substring(char* str, int from, int to) { char* sub = malloc(sizeof(char)*(to - from)); memcpy(sub, str + from, to - from + 1); return sub; } char** get_all_possible_substring(char* string, int* count) { size_t len = strlen(string); int count_of_substrings = (int)((float)(len*(len + 1)) * 0.5f); char** substrings = malloc(sizeof(char*) * count_of_substrings); int counter = count_of_substrings; for(int i = 0; i < len; i++) { for(int j = 0; j < i + 1;j++, counter--) { substrings[counter] = substring(string, j, j + len - i ); } } *count = count_of_substrings - 1; return substrings; } int main(int argc, char** argv) { int bufferSize = 1 << 16; char buffer[bufferSize]; char* readed = fgets(buffer, bufferSize, stdin); int count_of_substring; char** substrings = get_all_possible_substring(readed, &count_of_substring); while(count_of_substring) { char* substring = substrings[count_of_substring--]; printf("%s", substring); free(substring); } free(substrings); return 0; }