Подсчет гласных строки в 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/>";
?>
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/>";
?>
Чтобы не усложнять так много кода, я рекомендую сделать регулярное выражение:
return preg_match_all('/[aeiou]/i',$str,$matches);
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
)