Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5
  1. #1
    Аватар для R1KO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.01.2020
    Сообщений
    9
    Репутация:
    0 ±

    Как правильно реализовать поиск подстроки в строке?

    Есть массив:
    PHP код:
    static const text[] = "Hello world"// имитация text[]
    static const one[][] = {
        { 
    "1" },
        { 
    "2" },
        { 
    "3" }

    Далее мне надо проверить string на наличие слов из этого массива.
    Мой способ решения вопроса:
    PHP код:
    for (new isizeof(one); i++) {
        for (new 
    i2i2 sizeof(one[i]); i2++) {
            if (
    strfind(textone[i][i2], true) != -1) {
                
    // word in line
            
    } else {
                
    // word not in line
            
    }
        }

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

  2. #2
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    нормальное использование strfind не должно давать таких результатов.
    Но учитывая, как ты записываешь второй массив проверки (one), думаю, что такое возможно. В массиве one должны быть не буквы, а целые выражения

  3. #3
    Аватар для R1KO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.01.2020
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    нормальное использование strfind не должно давать таких результатов.
    Но учитывая, как ты записываешь второй массив проверки (one), думаю, что такое возможно. В массиве one должны быть не буквы, а целые выражения
    Я как бы сюда массив добавил для теста. В реальном массиве более 100+ слов. Смысл мне его сюда добавлять тему захламлять. Я это описал в самом нижнем сообщение.

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, ты в strfind передаёшь не отдельные слова, а перебираешь их побуквенно (точнее, если у тебя в нулевой ячейке записано, например, слово "привет", то первая итерация цикла передаст в strfind "привет", вторая - "ривет", третья - "ивет" и т.п.). Непонятно зачем ты вообще второй цикл добавил.

    1. stock FindForbiddenWords(const text[])
    2. {
    3. static const one[][] =
    4. {
    5. "1",
    6. "2",
    7. "3"
    8. };
    9.  
    10. for (new i; i < sizeof(one); i++)
    11. {
    12. if(strfind(text, one[i], true) != -1)
    13. {
    14. return 1;
    15. }
    16. }
    17. return 0;
    18. }
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    R1KO (08.01.2020)
  6. #5
    Аватар для R1KO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.01.2020
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, ты в strfind передаёшь не отдельные слова, а перебираешь их побуквенно (точнее, если у тебя в нулевой ячейке записано, например, слово "привет", то первая итерация цикла передаст в strfind "привет", вторая - "ривет", третья - "ивет" и т.п.). Непонятно зачем ты вообще второй цикл добавил.

    1. stock FindForbiddenWords(const text[])
    2. {
    3. static const one[][] =
    4. {
    5. "1",
    6. "2",
    7. "3"
    8. };
    9.  
    10. for (new i; i < sizeof(one); i++)
    11. {
    12. if(strfind(text, one[i], true) != -1)
    13. {
    14. return 1;
    15. }
    16. }
    17. return 0;
    18. }
    Спасибо за разъяснение.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •