Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ruan Avelino

Encontrar palavras repetidas dentro de uma string

Recommended Posts

Preciso escrever uma função que recebe uma string e retorna ​ TRUE caso hajam palavras repetidas na string ou ​ FALSE caso

não encontre palavras idênticas.
Restrições:
- as palavras são separadas por caracteres de espaço ou de pontuação tais como: ​ , ​ , ! ​ , ? ​ , ( ​ , ) ​ , ­ ​ , : ​ , ; ​ , .
- não há distinção entre maiúsculas e minusculas
sei que tenho que utilizar algumas das seguintes funções mais estou meio que sem um rumo a seguir ...

Preciso só que me deem um empurrão inicial.

Desde já agradeço...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso, eu não vejo como nenhuma dessas funções citadas pode te ajudar.. eu não usaria nenhuma delas.

 

 

Hum.. uma forma bem simples é vc quebrar essa string em um array. Assim cada posição do array irá conter uma palavra.

 

Depois agrupe as palavras e vc saberá se há algo repetido ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc não precisa saber o tamanho, vc sabe algo muito melhor:

 

os delimitadores:

 , ​ , ! ​ , ? ​ , ( ​ , ) ​ , ­ ​ , : ​ , ; 
Quebre a string pelos delimitadores. Poste algumas linhas de exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php 
$string1 = "fotos, videos, musicas, artigos, videos";
 
$string2 = str_split($string1);
 
print_r ($string2);
?>
</body> 
</html>

esse codigo não esta imprimindo nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$str = "fotos, videos, musicas, artigos, videos";

$words = explode(', ', $str);
$arr = Array();
foreach($words AS $word) {
  if (isset($arr[$word])) {
    $arr[$word] = $arr[$word] + 1;
  } else {
    $arr[$word] = 1;
  }
}

echo '<pre>';
var_dump($arr);
saída:

array(4) {
  ["fotos"]=>
  int(1)
  ["videos"]=>
  int(2)
  ["musicas"]=>
  int(1)
  ["artigos"]=>
  int(1)
}
ou seja, 2 vezes a palavra videos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

copiei o seu codigo fonte para alterar paro o meu caso so que meu navegador esta imprimindo

 

 

 

'; var_dump($arr); ?>[/size]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc precisa rodar em cima do apache, em um arquivo com extensão .php

Compartilhar este post


Link para o post
Compartilhar em outros sites

É algo ai no teu XAMPP. O script está correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou ver se desinstalando o xampp e instalando depois resolovo o probelma

 

 

<?php
function verifica_existencia($str){
$deLimiter = "​ ' , '​ ' ! '​ ' ? '​ ' ( '​ ' ) '​ ' ­ '​ ' : '​ ' ; '​ ' .'"
$words = explode($deLimiter, $str);
$arr = Array();
foreach($words AS $word) {
if (isset($arr[$word])) {
return TRUE;
} else {
return FALSE;
}
}
}
// EXEMPLO
 
$string = "fotos, videos, musicas, artigos, videos";
verifica_existencia($string)
?>

 

será que esse codigo-fonte está correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o objetivo dele ?

 

O explode ali não faz sentido.

se vc pode ter qq um desses delimitadores, creio que um preg_split() seja a melhor opção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a função tem que retornar TRUE caso haja palavras repitidas senão tiver palavra repitida ela retorna FALSE

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

function hasMoreThanOne($str) {
  $str = str_replace(' ', '', $str);
  $words = preg_split('/[,!\?:;\.\']/', $str);
  $arr = Array();
  foreach($words AS $word) {
    if (isset($arr[$word])) {
      return true;
    } else {
      $arr[$word] = 1;
    }
  }
  return false;
}

$str = "fotos, videos, musicas, artigos, videos";

echo '<pre>';
var_dump(hasMoreThanOne($str));



$str = "fotos! videos! musicas! artigos! artigos";

echo '<pre>';
var_dump(hasMoreThanOne($str));


$str = "fotos; videos; musicas; artigos;";

echo '<pre>';
var_dump(hasMoreThanOne($str));
saída:

bool(true)

bool(true)

bool(false)

Compartilhar este post


Link para o post
Compartilhar em outros sites

POW VALEU!!!

 

vou ver se consigo resolver o problema do xampp aqui pq fazer o codigo e não conseguir testar não adianta de nada

 

 

valeu mesmo!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A única coisa é que eu fiquei na duvida e queria mudar nesse código que as letras maiúsculas e minusculas não fossem diferenciadas, ou seja, mesmo escrevendo como maiúscula ou com minuscula a palavra continuam sendo iguais !! depois de algumas procuras eu mudei de

 

$str = str_replace(' ', '', $str); para $str = str_ireplace(' ', '', $str);

 

Mas não resolveu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara, ai vc tem q alterar aqui:

 

$word = strtolower($word);
if (isset($arr[$word])) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.