Quote (ZiGGi)
Давным давно хотел написать антимат, но так руки и не доходили, пока не попросили функцию на одном форуме. Этот антимат проверяет строку на запрещённые слова, учитывая исключения(оскорблять, например). Найденные плохие слова заменяет на *(сколько в слове символов, столько и звёздочек).
Исходный код функции:
Code
stock remove_bad_word(text[])
{
static words[][32] = {"bla","cyk"};
static exceptions[][32] = {"vobla", "krabla", "mobla","picyk","mucyk"};
new i, j, k, pos, epos, len, epos_buf;
for (i = 0; i < sizeof(words); i++)
{
while ( (pos = strfind(text, words[i], true, pos+1)) != -1 )
{
len = strlen(words[i]);
for (j = 0; j < sizeof(exceptions); j++)
{
epos = strfind(text, exceptions[j], true, epos+1);
if ( epos != pos - (strlen(exceptions[j]) - len) )
{
epos = epos_buf;
if (j == sizeof(exceptions)-1)
{
for (k = pos; k < pos+len; k++)
{
text[k] = '*';
}
}
continue;
}
else
{
break;
}
}
epos_buf = epos;
}
}
}
Пример использования
Code
public OnPlayerText(playerid, text[])
{
remove_bad_word(text);
return 1;
}
Автор: ZiGGi