C 语言代码:找到最短的唯一前缀
#include <stdio.h> #include <string.h>
#define MAX_WORD_LEN 20 #define MAX_WORD_NUM 1000
typedef struct { char word[MAX_WORD_LEN + 1]; int count; } Word;
Word words[MAX_WORD_NUM]; int wordNum;
char prefix[MAX_WORD_LEN + 1];
int findPrefix(char *word) { int len = strlen(word); int i; for (i = 1; i <= len; i++) { strncpy(prefix, word, i); prefix[i] = '\0'; int j, count = 0; for (j = 0; j < wordNum; j++) { if (strncmp(prefix, words[j].word, i) == 0) { count++; } } if (count == 1) { return i; } } return 0; }
int main() { char word[MAX_WORD_LEN + 1]; while (scanf('%s', word) != EOF) { strcpy(words[wordNum].word, word); words[wordNum].count = 0; wordNum++; }
int i;
for (i = 0; i < wordNum; i++) {
int prefixLen = findPrefix(words[i].word);
if (prefixLen == 0) {
prefixLen = 1;
}
strncpy(prefix, words[i].word, prefixLen);
prefix[prefixLen] = '\0';
printf('%s %s\n', words[i].word, prefix);
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/n7AJ 著作权归作者所有。请勿转载和采集!