Ir para conteúdo

Arquivado

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

Sow

Não consigo contar as vogais e consoantes de um textarea

Recommended Posts

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
}


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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é? ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites
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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

É 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:

 

http://php.net/explode

http://php.net/array_filter

http://php.net/array_count

http://php.net/array_reduce

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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.