#include #include #include #include int compare(const void *lhs, const void *rhs) { const char *left = lhs; const char *right = rhs; return *left > *right; } int main(int argc, char **argv) { if(argc != 3) { fprintf(stderr, "usage: %s \n", argv[0]); return 1; } char *needle = argv[1]; size_t needle_len = strlen(needle); char *deeeln = malloc(needle_len); if(!deeeln) { fprintf(stderr, "malloc: %s\n", strerror(errno)); return 1; } strncpy(deeeln, needle, needle_len); qsort(deeeln, needle_len, 1, compare); char *haystack = argv[2]; size_t haystack_len = strlen(haystack); char *aachksty = malloc(haystack_len); if(!aachksty) { fprintf(stderr, "malloc: %s\n", strerror(errno)); return 1; } size_t pos = 0; char *idx = haystack; unsigned int anagrams = 0; for(; pos + needle_len <= haystack_len; pos += 1, idx += 1) { strncpy(aachksty, idx, needle_len); qsort(aachksty, needle_len, 1, compare); if(strncmp(deeeln, aachksty, needle_len) == 0) { anagrams += 1; } } free(deeeln); free(aachksty); printf("%u anagram", anagrams); if(anagrams != 1) { printf("s"); } printf("\n"); return 0; }