如您所见,我正在尝试过滤各种不良词。我有一些代码可以这样做。我正在使用C,这也适用于GTK应用程序。
char LowerEnteredUsername[EnteredUsernameLen];
for(unsigned int i = 0; i < EnteredUsernameLen; i++) {
LowerEnteredUsername[i] = tolower(EnteredUsername[i]);
}
LowerEnteredUsername[EnteredUsernameLen+1] = '\0';
if (strstr(LowerEnteredUsername, (char[]){LetterF, LetterU, LetterC, LetterK})||strstr(LowerEnteredUsername, (char[]){LetterF, LetterC, LetterU, LetterK})) {
gtk_message_dialog_set_markup((GtkMessageDialog*)Dialog, "This username seems to be innapropriate.");
UsernameErr = 1;
}
我的问题是,它只会过滤if语句中指定的最后一个坏词。在此示例中,为“ fcuk”。如果我输入“ fuck”,则代码会将其作为干净代码传递。我该如何解决?
[在C语言中进行人工语言文本处理非常痛苦,因为C的字符串概念(即char*
/ char[]
和wchar_t*
/ wchar_t[]
)非常低级,不足以表达[代表Unicode文本,更不用说在文本中定位单词边界并匹配已知字典中的单词了(还应考虑到词尾变化,偏斜,复数,使用变音符号来避免幼稚的字符串匹配)。简而言之:如果需要,请避免在C中执行此操作,然后使用健壮且功能齐全的Unicode处理库(即,不要使用C标准库的字符串函数,例如strstr
,strtok
,strlen
,等等。
这是我的处理方式: