63 lines
1.2 KiB
C
63 lines
1.2 KiB
C
|
#include <errno.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
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 <needle> <haystack>\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;
|
||
|
}
|