повторение слов в предложении

Vadimka

Новичок
повторение слов в предложении

каким образом ограничить повторяющиеся слова в предложении , допустим до 3 повторяющихся слов..

:hi: :hi: :hi: :hi: :hi: :hi:
чтобы вместо 6-ти было 3-ри
 

SelenIT

IT-лунатик :)
Навскидку простейший алгоритм:
1) разбить предложение на массив слов
2) в цикле добавлять слова из массива к строке, запоминая последнее добавленное слово
3) если очередное слово совпадает с предыдущим - увеличить счетчик, иначе - обнулить его
4) если счетчик превысит лимит - пропустить слово.

Наверняка есть способ лучше, но мне он к сожалению не известен. Буду рад узнать.
 

BoFFiN

Новичок
Vadimka
PHP:
$word = ":hi: :hi: :hi: :hi: :hi: :hi:";
$A = explode(" ", $word);
echo str_repeat($A[0], 3);
-~{}~ 04.03.05 10:04:

сорри, не внимательно прочитал.. не совсем подходит... тогда по алгоритму SelenIT...

-~{}~ 04.03.05 10:15:

Что-то типа такого:
PHP:
$word = "Привет :hi: :hi: :hi: :hi: Как дела? :hi: :hi:";
$A = explode(" ", $word);
for($i=0; $i<count($A); $i++) {
  if($A[$i] == @$A[$i+1])
    $A[$i] = "";
    @$newword .= $A[$i];
}
echo $newword;
 

rotoZOOM

ACM maniac
Vadimka поставь вопрос более корректно.
Что такое "ограничить до 3 повторяющихся слов" ?
Повторяющихся === подряд идущих одинаковых ?
Чем отделяются слова ? Пробелами, табуляциями, знаками пунктуации и т.д.
Надо ли в результирующей строке сохранять количество пробелов между слов ...?
 

Vadimka

Новичок
Автор оригинала: rotoZOOM
Vadimka поставь вопрос более корректно.
Что такое "ограничить до 3 повторяющихся слов" ?
Повторяющихся === подряд идущих одинаковых ?
Чем отделяются слова ? Пробелами, табуляциями, знаками пунктуации и т.д.
Надо ли в результирующей строке сохранять количество пробелов между слов ...?
нет неповторяющихся.. предполагаю что необходимо учесть как пробелы так и табуляцию.. и кол-во пробелов можно сохранить...
 

rotoZOOM

ACM maniac
Vadimka О! Тогда предыдущие ответы тебе не подходят. А все из-за плохо поставленного вопроса.
Попробуй так:
PHP:
$used=array();
$res="";   // результирующая строка
$fl=false;
for ($i=0;$i<strlen($str);$i++){
     if (isvalidsymbol($str{$i}){
         if (!$fl)$a="";
         $fl=true;
         $a+=$str{$i};
     }else{
         if ($fl){
             if (array_key_exists($a, $used))$used[$a]++;
             else $used[$a]=0;
             if ($used[$a]<3){
                  $res+=$a;
             }
         }
         $fl=false;
         $res+=$str{$i};
     }
}
На выходе $res - результирующая строка.
Функцию isvalidsymbol напишешь сам, она должна
проверять символ на то, что он может являться частью слова.
Например:
PHP:
function isvalidsymbol ($sym)
{
      return ($sym!=' ' && $sym!='\t' && $sym!='\n');
}
Единственная проблема (или не проблема), это то, что например удалив очередное ненужное слово, мы сохраним все пробелы и табуляции до и после него в строке.
Это все легко убирается, но задача такая поставлена не была.
 
Сверху