Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal
Estou aprendendo a programar em php, e estou praticando, mas travo em algumas coisas, será que vocês poderiam me ajudar?
Nesse exercício, eu tenho que pegar um texto de um formulário e contar as vogais e consotantes, o problema é que eu não sei lidar direito com vetores, eu recebo uma string e como faço pra transformar ela para poder contar essas ocorrências?
<?php
header('Content-type: text/html; charset=UTF-8');
/*
5 - Faça um programa em PHP para ler um texto qualquer em uma textarea,
* o programa deverá imprimir
seu conteúdo na tela, juntamente com os seguintes dados:
- Total de vogais escritas;
- Total de consoantes escritas;
- Total de caracteres escritos;
*/
if (isset($_POST['enviar'])) {
//recebe o texto do formulário
$recebe = $_POST['edt_text'];
// Separa os acentos das letras
$texto = iconv('utf-8', 'us-ascii//TRANSLIT', $recebe);
// Remove qualquer coisa que não seja uma letra
$texto = preg_replace("[\W]", "", $texto);
// Passa tudo para minúculas
$texto = strtolower($texto);
// conta quantos caracteres (sem acentos e espaços)
$tam = strlen($texto);
// Transforma as letras em um array
$letras = str_split($texto);
$vog = 0;
$con = 0;
for ($i = 0; $i <= $tam; $i++) {
if (($letras[$i] == 'a') || ($letras[$i] == 'e') ||
($letras[$i] == 'i') || ($letras[$i] == 'o') ||
($letras[$i] == 'u')) {
$vog++;
} else {
$con++;
}
}
echo 'Letras: <b>'.$tam.'</b>';
echo 'Vogais: <b>'.$vog.'</b>';
echo 'Consoantes: <b>'.$con.'</b>';
}else{
?>
<form name="form-exer05-aula05" method="POST" action="exercicio05.php">
Escreva aqui um texto:
<br/>
<textarea name="edt_text" rows = "10" cols = "50" maxlength = "550">
</textarea>
<br/>
<input type="submit" value="Enviar" name="enviar" />
</form>
<?php
}
?>>
Eu conheço duas formas de se fazer isso, veja se consegue adaptar alguma delas para sua necessidade:
$text = strtolower( 'Imasters' );
$vowels = array(
'a',
'e',
'i',
'o',
'u'
);
$textLength = (int)strlen( $text );
$vowelsLength = (int)preg_match_all( "/[" . implode( $vowels ) . "]/i", $text, $matches );
$consonantsLength = $textLength - $vowelsLength;
echo "Total de caracteres: " . $textLength . '<br>' . PHP_EOL;
echo "Total de vogais: " . $vowelsLength . '<br>' . PHP_EOL;
echo "Total de consoantes: " . $consonantsLength . '<br>' . PHP_EOL;
$text = strtolower( 'Imasters' );
$vowels = array(
'a',
'e',
'i',
'o',
'u'
);
$textLength = (int)strlen( $text );
$vowelsLength = 0;
$consonantsLength = 0;
for( $i = 0; $i < $textLength; $i++ ) {
if ( in_array( $text[$i], $vowels ) ) {
$vowelsLength++;
} else {
$consonantsLength++;
}
}
echo "Total de caracteres: " . $textLength . '<br>' . PHP_EOL;
echo "Total de vogais: " . $vowelsLength . '<br>' . PHP_EOL;
echo "Total de consoantes: " . $consonantsLength . '<br>' . PHP_EOL;
[member=Jonaslhp] assumir que o total de consoantes seja igual ao tamanho do texto menos as vogais é um equívoco grande. Se esqueceu de considerar espaços e pontuação.
Mas, como já foi dado um norte, deixa ele pensar um pouquinho por si só agora. Vai que o professor que passou o exercício acompanha o fórum, né? ;)
Jonaslhp assumir que o total de consoantes seja igual ao tamanho do texto menos as vogais é um equívoco grande. Se esqueceu de considerar espaços e pontuação.
É verdade, Evandro! Fiz um exemplo rápido e não pensei em tudo que deveria, so sorry :(
Aliás, como não pensei nisto antes, fiquei curioso. Acha que um :punct: e mais um preg_match_all poderia ser uma boa solução para contar as consoantes?
>
É verdade, Evandro! Fiz um exemplo rápido e não pensei em tudo que deveria, so sorry :(
Aliás, como não pensei nisto antes, fiquei curioso. Acha que um :punct: e mais um preg_match_all poderia ser uma boa solução para contar as consoantes?
Eu, particularmente, não resolveria com regex:
Olá pessoal, como vcs demoraram para responder eu consegui resolver o problema sozinha. Eu precisava apenas retirar do código este trecho:
// Transforma as letras em um array
$letras = str_split($texto);
Mas agradeço pela sugestão de vocês! =D
Eu conheço duas formas de se fazer isso, veja se consegue adaptar alguma delas para sua necessidade: