Подсчет гласных строки в PHP7


У меня есть следующее утверждение: Я должен подсчитать общее количество символов в строке, подсчитать общее количество гласных, и количество раз, когда каждый гласный появляется. Я теряюсь немного, и я сделал это без цикла в то время как. Я также не могу использовать массивы. Ошибка, которую я получаю от желания подсчитать гласные отдельно:

Warning: substr() expects parameter 2 to be integer, string given in /opt/lampp/htdocs/pruebaexamen/ejercicio1.php on line 5

Warning: substr() expects parameter 2 to be integer, string given in /opt/lampp/htdocs/pruebaexamen/ejercicio1.php on line 6

Warning: substr() expects parameter 2 to be integer, string given in /opt/lampp/htdocs/pruebaexamen/ejercicio1.php on line 7

Warning: substr() expects parameter 2 to be integer, string given in /opt/lampp/htdocs/pruebaexamen/ejercicio1.php on line 8

Warning: substr() expects parameter 2 to be integer, string given in /opt/lampp/htdocs/pruebaexamen/ejercicio1.php on line 9

PHP код :

<?php
    $texto = $_POST['texto'];
        $caracteres = strlen($texto);
        $vocales = substr_count($texto, 'a')+substr_count($texto, 'e')+substr_count($texto, 'i')+substr_count($texto, 'o')+substr_count($texto, 'u')+substr_count($texto, 'A')+substr_count($texto, 'E')+substr_count($texto, 'I')+substr_count($texto, 'O')+substr_count($texto, 'U');
        $a = substr_count($texto, 'a') + substr($texto, 'A');
        $e = substr_count($texto, 'e') + substr($texto, 'E');
        $i = substr_count($texto, 'i') + substr($texto, 'I');
        $o = substr_count($texto, 'o') + substr($texto, 'O');
        $u = substr_count($texto, 'u') + substr($texto, 'U');
        echo "El número total de caracteres es $caracteres <br/>";
        echo "El total de vocales es $vocales <br/>";
        echo "El numero de letras a (mayúsculas incluidas) es $a <br/>";
        echo "El numero de letras e (mayúsculas incluidas) es $e <br/>";
        echo "El numero de letras i (mayúsculas incluidas) es $i <br/>";
        echo "El numero de letras o (mayúsculas incluidas) es $o <br/>";
        echo "El numero de letras u (mayúsculas incluidas) es $u <br/>";
?>
Author: ras212, 2016-11-04

3 answers

Ваш код, но "правильный". Вы ошиблись, поставив substr, Нет substr_count

PHP:

<?php
    $texto = $_POST['texto'];
        $caracteres = strlen($texto);
        $vocales = substr_count($texto, 'a')+substr_count($texto, 'e')+substr_count($texto, 'i')+substr_count($texto, 'o')+substr_count($texto, 'u')+substr_count($texto, 'A')+substr_count($texto, 'E')+substr_count($texto, 'I')+substr_count($texto, 'O')+substr_count($texto, 'U');
        $a = substr_count($texto, 'a') + substr_count($texto, 'A');
        $e = substr_count($texto, 'e') + substr_count($texto, 'E');
        $i = substr_count($texto, 'i') + substr_count($texto, 'I');
        $o = substr_count($texto, 'o') + substr_count($texto, 'O');
        $u = substr_count($texto, 'u') + substr_count($texto, 'U');
        echo "El número total de caracteres es $caracteres <br/>";
        echo "El total de vocales es $vocales <br/>";
        echo "El numero de letras a (mayúsculas incluidas) es $a <br/>";
        echo "El numero de letras e (mayúsculas incluidas) es $e <br/>";
        echo "El numero de letras i (mayúsculas incluidas) es $i <br/>";
        echo "El numero de letras o (mayúsculas incluidas) es $o <br/>";
        echo "El numero de letras u (mayúsculas incluidas) es $u <br/>";
?>
 3
Author: Daniel Díaz, 2016-11-04 21:07:35

Чтобы не усложнять так много кода, я рекомендую сделать регулярное выражение:

return preg_match_all('/[aeiou]/i',$str,$matches);
 0
Author: AlejandroBec, 2018-09-28 22:26:54

EDIT: ваш код работает нормально, потому что вы используете substr_count для нижнего регистра, но вы пытаетесь сделать только substr для верхнего регистра. Вот почему он дает вам WARNING, потому что метод substr нуждается в двух целочисленных параметрах, а не в String. Вам также нужно будет удалить теги <\br>.

Ваш исправленный код будет:

<?php
    $texto = "oapresoiresoihriohesoirejsroijes";
    $caracteres = strlen($texto);
    $vocales = substr_count($texto, 'a')+substr_count($texto, 'e')+substr_count($texto, 'i')+substr_count($texto, 'o')+substr_count($texto, 'u')+substr_count($texto, 'A')+substr_count($texto, 'E')+substr_count($texto, 'I')+substr_count($texto, 'O')+substr_count($texto, 'U');
    $a = substr_count($texto, 'a') + substr_count($texto, 'A');
    $e = substr_count($texto, 'e') + substr_count($texto, 'E');
    $i = substr_count($texto, 'i') + substr_count($texto, 'I');
    $o = substr_count($texto, 'o') + substr_count($texto, 'O');
    $u = substr_count($texto, 'u') + substr_count($texto, 'U');
    echo "El número total de caracteres es $caracteres \n";
    echo "El total de vocales es $vocales";
    echo "El numero de letras a (mayúsculas incluidas) es $a \n";
    echo "El numero de letras e (mayúsculas incluidas) es $e \n>";
    echo "El numero de letras i (mayúsculas incluidas) es $i \n";
    echo "El numero de letras o (mayúsculas incluidas) es $o \n";
    echo "El numero de letras u (mayúsculas incluidas) es $u \n";
?>

Оригинальный ответ: я не читал, что одно требование состояло в том, чтобы не использовать массивы. В случае, если они могут быть использованы, я оставляю пример, если это может быть полезно для кого-то в будущем.

Вам не нужно делать какие-либо циклы while.

С помощью собственных функций PHP вы можете выполнить следующее:

<?php
      $cadena = "oapresoiresoihriohesoirejsroijes";

      //Divides la cadena por carácteres y lo almacenas en un array.
      $array = str_split($cadena); 

      //Estableces cuales son los valores que te quieres quedar
      $vocales = array('a', 'e', 'i', 'o', 'u'); 

      //Con array_filter quitas los valores que no quieres en tu array.
      //O mejor dicho, te quedas sólo con los que necesitas.
      $arrayQuitandoConsonantes = array_filter($array, function($val) use ($vocales) {
          return in_array($val, $vocales);
      });

      //Muestras la cantidad de veces que está contenida cada vocal
      print_r(array_count_values($arrayQuitandoConsonantes)); 

Для этой строки соответствующий output будет:

Array
(
    [o] => 6
    [a] => 1
    [e] => 5
    [i] => 5
)
 -1
Author: Francisco Romero, 2016-11-04 21:11:54