// not uniq(1) #include #include #include const char *unique(const char *str, const char **dup) { const char *alphabet[26] = { NULL }; for(; *str; str += 1) { uint8_t pos = tolower(*str) - 'a'; if(pos >= 0 && pos <= 25) { if(alphabet[pos]) { *dup = str; return alphabet[pos]; } else { alphabet[pos] = str; } } } return NULL; } int main(int argc, char **argv) { const char *str = ""; if(argc > 1) { str = argv[1]; } const char *dup = NULL; const char *idx = unique(str, &dup); if(dup) { uint8_t idx_spacing = (int) (idx - str) + 1; uint8_t dup_spacing = (int) (dup - str) - idx_spacing + 1; printf("%s\n%*s%*s\n", str, idx_spacing, "^", dup_spacing, "^"); } return 0; }