#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
static const char *forbidden_sorted[] = {
"badword",
"evil",
"kill",
"nasty",
"terrible"
};
static const size_t forbidden_words_size =
sizeof(forbidden_sorted) / sizeof(forbidden_sorted[0]);
int cmpstr(const void *a, const void *b) {
const char *key = *(const char * const *)a;
const char *entry = *(const char * const *)b;
return strcmp(key, entry);
}
int contains_forbidden(const char *input) {
char buffer[1024];
strncpy(buffer, input, sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0';
char *token = strtok(buffer, " \t\n\r.,!?;:-()[]{}\"'");
while (token) {
// Normalize to lowercase
for (char *p = token; *p; p++)
*p = (char)tolower((unsigned char)*p);
const char *key = token;
if (bsearch(&key, forbidden_sorted, forbidden_words_size,
sizeof(char *), cmpstr)) {
return 1;
}
token = strtok(NULL, " \t\n\r.,!?;:-()[]{}\"'");
}
return 0;
}
int main() {
const char *s = "This text contains a badword inside";
if (contains_forbidden(s)) {
puts("Forbidden word detected");
} else {
puts("No forbidden words found");
}
return 0;
}
/*
run:
Forbidden word detected
*/