PDA

Просмотр полной версии : [Вопрос] Как правильно реализовать поиск подстроки в строке?



R1KO
08.01.2020, 02:08
Есть массив:


static const text[] = "Hello world"; // имитация text[]
static const one[][] = {
{ "1" },
{ "2" },
{ "3" }
}

Далее мне надо проверить string на наличие слов из этого массива.
Мой способ решения вопроса:


for (new i; i < sizeof(one); i++) {
for (new i2; i2 < sizeof(one[i]); i2++) {
if (strfind(text, one[i][i2], true) != -1) {
// word in line
} else {
// word not in line
}
}
}

Проблемы:
Вообщем-то работает, но не так как надо. Система реагирует не так как надо, т.е если в массиве будет слово Мда то все слова где есть буквы М,Д,А будут тоже проходить. Мдауж тоже будет проходить но не должно. А Мда уж должно проходить. Это вообще возможно?

MassonNN
08.01.2020, 12:02
нормальное использование strfind не должно давать таких результатов.
Но учитывая, как ты записываешь второй массив проверки (one), думаю, что такое возможно. В массиве one должны быть не буквы, а целые выражения

R1KO
08.01.2020, 15:33
нормальное использование strfind не должно давать таких результатов.
Но учитывая, как ты записываешь второй массив проверки (one), думаю, что такое возможно. В массиве one должны быть не буквы, а целые выражения

Я как бы сюда массив добавил для теста. В реальном массиве более 100+ слов. Смысл мне его сюда добавлять тему захламлять. Я это описал в самом нижнем сообщение.

DeimoS
08.01.2020, 16:03
Эмм, ты в strfind передаёшь не отдельные слова, а перебираешь их побуквенно (точнее, если у тебя в нулевой ячейке записано, например, слово "привет", то первая итерация цикла передаст в strfind "привет", вторая - "ривет", третья - "ивет" и т.п.). Непонятно зачем ты вообще второй цикл добавил.

stock FindForbiddenWords(const text[])
{
static const one[][] =
{
"1",
"2",
"3"
};

for (new i; i < sizeof(one); i++)
{
if(strfind(text, one[i], true) != -1)
{
return 1;
}
}
return 0;
}

R1KO
08.01.2020, 16:20
Эмм, ты в strfind передаёшь не отдельные слова, а перебираешь их побуквенно (точнее, если у тебя в нулевой ячейке записано, например, слово "привет", то первая итерация цикла передаст в strfind "привет", вторая - "ривет", третья - "ивет" и т.п.). Непонятно зачем ты вообще второй цикл добавил.

stock FindForbiddenWords(const text[])
{
static const one[][] =
{
"1",
"2",
"3"
};

for (new i; i < sizeof(one); i++)
{
if(strfind(text, one[i], true) != -1)
{
return 1;
}
}
return 0;
}

Спасибо за разъяснение.