what would be the correct way to solve this exercise in php ?, I'm doing it like that but the syntax is wrong

0

<h2>Total carácteres</h2>
<form action="" method="post"></form>
<label>Ingrese carácter: 
    <textarea name="caracteres" id="" cols="10" rows="10">
    </textarea>
</label>
<br>
<input type="submit" value="ENVIAR">
<hr>

<?php
   $caracter = $_POST['caracteres'];

   while ($caracter != "@"){
        switch ($caracter) {
            case ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"):
                $tv += 1;   // total vocales
                break;
            case  "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "ñ", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z",
                  "B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "Ñ", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z":
                $tc += 1;   // total consonantes
                break;
            case ($caracter >=0 && $caracter <= 9):
                $tn += 1;   // total números
            default:
               $totr += 1;  // total otros caracteres
                break;
        }
   }

   echo "<br>Total de Vocales: {$tv}";
   echo "<br>Total de Consonantes: {$tc}";
   echo "<br>Total de Números: {$tn}";
   echo "<br>Total Otros: {$totr}";
?>

'TDy.png

    
asked by Grover Cristobal 19.05.2018 в 06:19
source

1 answer

2

The syntax you are using in case: is not valid.

In any case I do not think a switch is the best way to solve this problem.

An example of how you can solve it can be the following, I have commented the code so you can understand it easily:

<?php
function contar_caracteres(string $cadena) {
    // obtenemos la longitud
    $len = mb_strlen($cadena, 'UTF-8');
    // declaramos nuestros arreglos vacios
    $apariciones = array();
    $vocal = array();
    $consonante = array();
    $otros = array();
    // hacemos un bucle para comparar caracter a caracter
    for($i = 0; $i < $len; $i++) {
        // extraemos los caracteres uno a uno
        $caracter = mb_substr($cadena, $i, 1, 'UTF-8');
        // comprobamos si ya ha salido antes
        if(!array_key_exists($caracter, $apariciones)) {
            // si no ha aparecido antes lo añadimos al array apariciones
            $apariciones[$caracter] = 0;
        }
        // le sumamos 1 
        $apariciones[$caracter]++;

        // comprobamos si es una vocal
        if (preg_match('/[aeiouáéíóúü]/i', $caracter)) {
            // si lo es lo añadimos al array de vocales
            $vocal[$caracter] = $apariciones[$caracter];
        // comprobamos si es una consonante, ya que sabemos que no es una vocal podemos usar A-z
        } elseif (preg_match('/[A-z]/i', $caracter)) {
            // si es una consonante la añadimos al array de consonantes
            $consonante[$caracter] = $apariciones[$caracter];
        } else {
            // si no es ni vocal ni consonante la añadimos al array otros
            $otros[$caracter] = $apariciones[$caracter];
        }
    }
    // Retornamos un array con todo
    return array('apariciones' => $apariciones, 'vocal' => $vocal, 'consonantes' => $consonante, 'otros' => $otros);
}

// definimos la cadena
$frase = 'Esto es una cadena @ con una arroba en medio';

// hacemos explode por la arroba para obtener la primera parte
$explode_arroba = explode('@', $frase);
// contamos los caracteres
$general = contar_caracteres($explode_arroba[0]);

echo 'Total vocales: '.array_sum($general['vocales'])."\n";
echo 'Total consonantes: '.array_sum($general['consonantes'])."\n";
echo 'Total otros: '.array_sum($general['otros'])."\n";
echo 'Total caracteres: '.array_sum($general['apariciones'])."\n";

print_r($general);

Result:

Total vocales: 8
Total consonantes: 7
Total otros: 4
Total caracteres: 19

Array
(
    [apariciones] => Array
        (
            [E] => 1
            [s] => 2
            [t] => 1
            [o] => 1
            [ ] => 4
            [e] => 2
            [u] => 1
            [n] => 2
            [a] => 3
            [c] => 1
            [d] => 1
        )

    [vocales] => Array
        (
            [E] => 1
            [o] => 1
            [e] => 2
            [u] => 1
            [a] => 3
        )

    [consonantes] => Array
        (
            [s] => 2
            [t] => 1
            [n] => 2
            [c] => 1
            [d] => 1
        )

    [otros] => Array
        (
            [ ] => 4
        )

)
    
answered by 19.05.2018 в 12:40