За последние 24 часа нас посетил 20931 программист и 1109 роботов. Сейчас ищут 383 программиста ...

Максимальное совпадение строк

Тема в разделе "Прочие вопросы по PHP", создана пользователем Eugene, 6 мар 2006.

  1. Eugene

    Eugene Активный пользователь

    С нами с:
    6 мар 2006
    Сообщения:
    7
    Симпатии:
    0
    Подскажите, если какая-нибудь функция выдающая либо максимальное совпадение двух строк, либо максимальную разницу?

    Если вообще какая-нибудь теория по этому поводу? Например, что максимальное различие при каких-либо условиях определяется однозначно.

    Или может кто-то сам пытался реализовать такой алгоритм?
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Eugene
    пример приведи? две строки и их совпадение?
     
  3. Eugene

    Eugene Активный пользователь

    С нами с:
    6 мар 2006
    Сообщения:
    7
    Симпатии:
    0
    Пример такой:

    Завтра утром будет облачно, без осадков. Температура +2 - +4.

    Завтра утром будет снег с дождем. Температура -1 - +1.

    Макс совпадение ="Завтра уторм будет "

    В идеале хочется подсветить неизменившиеся части строк, например, длина которых > 3 символов
     
  4. Eugene

    Eugene Активный пользователь

    С нами с:
    6 мар 2006
    Сообщения:
    7
    Симпатии:
    0
    Вот так по другому могу сформулировать вопрос:

    Есть ли функция которая выдает совпадение строк начиная с их начала?
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Eugene
    так напиши. в чем проблема?
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    PHP:
    1. <?
    2.  
    3. function CompareString($str1,$str2) {
    4.  
    5.     $l = min(strlen($str1),strlen($str2));
    6.  
    7.     for($i=0;$i<$l;$i++) {
    8.         if($str1[$i] != $str2[$i]) return $i;
    9.     }
    10.  
    11.     return 0;
    12. }
    13.  
    14.  
    15. $str1 = 'Завтра утром будет облачно, без осадков. Температура +2 - +4. ';
    16. $str2 = 'Завтра утром будет снег с дождем. Температура -1 - +1. ';
    17.  
    18. $cmp = CompareString($str1,$str2);
    19.  
    20. if($cmp) {
    21.     print("\nНачало расхождения: ".$cmp);
    22.     print("\nОбщая подстрока   : [".substr($str1,0,$cmp)."]");
    23. } else {
    24.     print("\nСтроки разные");
    25. }
    26.  
    27. ?>
    Код (Text):
    1.  
    2. #>php ttt.php
    3.  
    4. Начало расхождения: 19
    5. Общая подстрока   : [Завтра утром будет ]
     
  7. Eugene

    Eugene Активный пользователь

    С нами с:
    6 мар 2006
    Сообщения:
    7
    Симпатии:
    0
    440hz
    Большое спасибо, за код. Просто я думал есть какие-то стандарьные функции.

    А еще нашел вот какую интересную функцию - levenshtein. Но она не так полезна оказалась как Ваш код :)