En la presente entrada se mostrarán ejemplos de código PHP relacionados con las cadenas (para saber más sobre este tema, ver la siguiente entrada de este blog).
Como siempre, los códigos se relacionan con situaciones hipotéticas en las que son útiles. Además, se trata de una de las múltiples posibilidades de tales situaciones, pero no la única.
Todos los códigos de los ejemplos han sido probados y funcionan perfectamente en las situaciones referidas a cada uno de ellos.
El programa recibe una cadena y la devuelve invertida.
<?php
$cadena = "Robot";
$largo = strlen ($cadena);
$inverso = "";
for ($i = ($largo - 1); $i >= 0; $i--) {
$inverso.=$cadena[$i];
}
echo "El inverso de ". $cadena. " es ". $inverso. ".";
?>
_________________________________________________________________________
Enviando la cadena desde un formulario, el programa dirá si es un palíndromo o no o, en caso de ser una cadena numérica, si es un número capicúa o no.
Formulario (HTML):
<!DOCTYPE html>
<html>
<head>
<title>Formulario cadenas</title>
</head>
<body>
<form action="Cadenas02.php" method="GET">
<fieldset>
<legend class="datos">Datos personales</legend>
<p>Escriba una palabra o un número en la caja:</p></br>
<label>Valor:<input type="text" name="valor"/></label><br/>
<input type="submit" value="Enviar" />
</fieldset>
</form>
</body>
</html>
Procesado de datos (PHP):
<!DOCTYPE html>
<html>
<body>
<?php
$valor = $_GET ["valor"];
if (is_numeric ($valor)) {
$result = "";
for ($i = strlen($valor) - 1; $i >= 0; $i--) {
$result.=$valor[$i];
}
if ($result == $valor) {
$bnumeric = True;
} else {
$bnumeric = False;
}
} else {
$largo = strlen ($valor);
$inverso = "";
for ($i = ($largo - 1); $i >= 0; $i--) {
$inverso.=$valor[$i];
}
if ($inverso == $valor) {
$bstring = True;
} else {
$bstring = False;
}
}
?>
<table>
<tr>
<td>
<?php
if (is_numeric($valor)) {
if ($bnumeric) {
echo "El número ". $valor. " es capicúa";
} else {
echo "El número ". $valor. " no es capicúa";
}
} else {
if ($bstring) {
echo "La palabra ". $valor. " es un palíndromo";
} else {
echo "La palabra ". $valor. " no es un palíndromo";
}
}
?>
</td>
</tr>
</body>
</html>
_________________________________________________________________________
En este caso se trata de un cambio en el anterior para que, en caso de ser una cadena de letras, no se distingan la mayúsculas y las minúsculas (como el formulario es el mismo que en el caso anterior, sólo se pondrá el código PHP del procesado de datos).
<!DOCTYPE html>
<html>
<body>
<?php
$valor = $_GET ["valor"];
if (is_numeric ($valor)) {
$result = "";
for ($i = strlen($valor) - 1; $i >= 0; $i--) {
$result.=$valor[$i];
}
if ($result == $valor) {
$bnumeric = True;
} else {
$bnumeric = False;
}
} else {
$valor = strtoupper($valor);
$largo = strlen ($valor);
$inverso = "";
for ($i = ($largo - 1); $i >= 0; $i--) {
$inverso.=$valor[$i];
}
if ($inverso == $valor) {
$bstring = True;
} else {
$bstring = False;
}
}
?>
<table>
<tr>
<td>
<?php
if (is_numeric($valor)) {
if ($bnumeric) {
echo "El número ". $valor. " es capicúa";
} else {
echo "El número ". $valor. " no es capicúa";
}
} else {
if ($bstring) {
echo "La palabra ". $valor. " es un palíndromo";
} else {
echo "La palabra ". $valor. " no es un palíndromo";
}
}
?>
</td>
</tr>
</body>
</html>
_________________________________________________________________________
En este programa se enviará un texto desde un formulario y el programa devolverá la cantidad de cada vocal que hay en él.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contar vocales</title>
</head>
<body>
<p>Introduce una cadena</p>
<form action="cuentavocales.php">
<input type="text" name="cadena">
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function contarVocales($cadena) {
$vocales = array("a" => 0,
"e" => 0,
"i" => 0,
"o" => 0,
"u" => 0);
for ($j = 0; $j < strlen($cadena); $j++) {
switch ($cadena[$j]) {
case 'a':
case 'á':
case 'A':
case 'Á':
$vocales["a"]++;
break;
case 'e':
case 'é':
case 'E':
case 'É':
$vocales["e"]++;
break;
case 'i':
case 'í':
case 'I':
case 'Í':
$vocales["i"]++;
break;
case 'o':
case 'ó':
case 'O':
case 'Ó':
$vocales["o"]++;
break;
case 'u':
case 'ú':
case 'U':
case 'Ú':
case 'ü':
case 'Ü':
$vocales["u"]++;
break;
}
}
return $vocales;
}
$cadena = $_GET["cadena"];
echo "En la cadena $cadena <br/>";
$vocales = contarVocales($cadena);
foreach ($vocales as $vocal => $valor) {
echo "La $vocal aparece $valor veces <br/>";
}
?>
_________________________________________________________________________
En este ejemplo se partirá del anterior y el programa devolverá el resultado en una matriz asociativa (como el formulario es el mismo que el del ejemplo anterior, sólo se pondrá aquí el código PHP del procesado de datos).
<?php
function contarVocales($cadena) {
$vocales = array("a" => 0,
"e" => 0,
"i" => 0,
"o" => 0,
"u" => 0);
$cadena = strtolower($cadena); //Paso la cadena a minúsculas
$longitud = strlen($cadena);
for ($j = 0; $j < $longitud; $j++) {
switch ($cadena[$j]) {
case 'a':
case 'á':
$vocales["a"]++;
break;
case 'e':
case 'é':
$vocales["e"]++;
break;
case 'i':
case 'í':
$vocales["i"]++;
break;
case 'o':
case 'ó':
$vocales["o"]++;
break;
case 'u':
case 'ú':
case 'ü':
$vocales["u"]++;
break;
}
}
return $vocales;
}
$cadena = $_GET["cadena"];
echo "En la cadena $cadena <br/>";
$vocales = contarVocales($cadena);
foreach ($vocales as $vocal => $valor) {
echo "La $vocal aparece $valor veces <br/>";
}
?>
________________________________________________________________________
En este caso, el programa recibirá un texto a través de un formulario y devolverá la primera frase del mismo (hasta que encuentre un punto o llegue al final; lo que suceda antes).
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Obtener la primera frase</title>
</head>
<body>
<p>Introduce una cadena</p>
<form action="primerafrase.php">
<textarea name="texto" cols="30" rows="10"></textarea>
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
$texto = $_GET["texto"];
$posicionPunto = strpos($texto, ".");
if ($posicionPunto === FALSE) {
//No se ha encontrado el "."
$primeraFrase = $texto;
} else {
$primeraFrase = substr($texto, 0, $posicionPunto);
}
echo $primeraFrase;
?>
_________________________________________________________________________
El siguiente ejemplo contiene un programa que sustituye cada aparición de "ko" por "no" en un texto proporcionado desde un formulario.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Remplazo</title>
</head>
<body>
<p>Introduce un texto</p>
<form action="reemplazo.php">
<textarea name="texto" cols="30" rows="10"></textarea>
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
$texto = $_GET["texto"];
$textoSustutuido = str_replace("ko", "no", $texto);
echo $textoSustituido;
?>
________________________________________________________________________
El siguiente programa, basado en el anterior, recibirá del formulario tanto el texto a sustituir, como la cadena a buscar y la cadena por la que se sustituye.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Remplazo</title>
</head>
<body>
<p>Introduce un texto</p>
<form action="reemplazo.php">
<textarea name="texto" cols="30" rows="10"></textarea><br>
Texto a buscar: <input type="text" name="buscar"><br>
Remplazar por: <input type="text" name="reemplazar">
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
$texto = $_GET["texto"];
$buscar = $_GET["buscar"];
$remplazar = $_GET["reemplazar"];
$textoSustituido = str_replace($buscar, $reemplazar, $texto);
echo $textoSustituido;
?>
_________________________________________________________________________
El siguiente programa recibe dos cadenas desde un formulario y devuelve el número de letras finales que coinciden entre ellas.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Últimas letras</title>
</head>
<body>
<p>Introduce dos cadenas</p>
<form action="letrasFinales.php">
<input type="text" name="cadena1"><br>
<input type="text" name="cadena2">
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function letrasFinales($cadena1, $cadena2) {
$lonCadena1 = strlen($cadena1);
$lonCadena2 = strlen($cadena2);
if ($lonCadena1 < $lonCadena2) {
$lonMenor = $lonCadena1;
} else {
$lonMenor = $lonCadena2;
}
$contador = 0;
for ($i=1; $i < $lonMenor; $i++) {
if ($cadena1[$lonCadena1-$i] == $cadena2[$lonCadena2-$i]) {
$contador++;
} else {
break;
}
}
return $contador;
}
echo letrasFinales($_GET["cadena1"], $_GET["cadena2"]);
?>
_________________________________________________________________________
El programa de este ejemplo recibe, desde un formulario, el número completo de un DNI (letra incluída) como cadena, y devuelve la letra.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DNI</title>
</head>
<body>
<p>Cálculo de la letra del DNI</p>
<form action="10-dni.php">
<input type="text" name="dni"><br>
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function letraDNI($dni) {
$letras = "TRWAGMYFPDXBNJZSQVHLCKE";
return $letras[$dni % 23];
}
echo $_GET['dni'] . "-" . letraDNI($_GET['dni']);
?>
_________________________________________________________________________
En el siguiente ejemplo, el programa cuenta el número de palabras de un texto dado.
Formulario (HTML):
!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contador de palabras</title>
</head>
<body>
<form action="contarPalabras.php" method="GET">
<input type="text" name="texto"/>
<input type="submit" value="Enviar"/>
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function contarPalabra($cadena, $palabra) {
$contador = 0;
$inicio = 0;
$cadena = strtoupper($cadena);
$palabra = strtoupper($palabra);
$lonCadena = strlen($cadena);
$lonPalabra = strlen($palabra);
while (($posicion = strpos($cadena, $palabra, $inicio)) !== FALSE) {
$contador++;
$inicio = $posicion + $lonPalabra;
}
return $contador;
}
$cadena = $_GET["texto"];
echo $cadena;
echo "<br/>";
echo contarPalabra($cadena, "la");
?>
_________________________________________________________________________
Espero que esta entrada haya resultado interesante al lector. De ser así, aguardo que el lector la comente y/o la comparta, por favor.
El programa recibe una cadena y la devuelve invertida.
<?php
$cadena = "Robot";
$largo = strlen ($cadena);
$inverso = "";
for ($i = ($largo - 1); $i >= 0; $i--) {
$inverso.=$cadena[$i];
}
echo "El inverso de ". $cadena. " es ". $inverso. ".";
?>
_________________________________________________________________________
Enviando la cadena desde un formulario, el programa dirá si es un palíndromo o no o, en caso de ser una cadena numérica, si es un número capicúa o no.
Formulario (HTML):
<!DOCTYPE html>
<html>
<head>
<title>Formulario cadenas</title>
</head>
<body>
<form action="Cadenas02.php" method="GET">
<fieldset>
<legend class="datos">Datos personales</legend>
<p>Escriba una palabra o un número en la caja:</p></br>
<label>Valor:<input type="text" name="valor"/></label><br/>
<input type="submit" value="Enviar" />
</fieldset>
</form>
</body>
</html>
Procesado de datos (PHP):
<!DOCTYPE html>
<html>
<body>
<?php
$valor = $_GET ["valor"];
if (is_numeric ($valor)) {
$result = "";
for ($i = strlen($valor) - 1; $i >= 0; $i--) {
$result.=$valor[$i];
}
if ($result == $valor) {
$bnumeric = True;
} else {
$bnumeric = False;
}
} else {
$largo = strlen ($valor);
$inverso = "";
for ($i = ($largo - 1); $i >= 0; $i--) {
$inverso.=$valor[$i];
}
if ($inverso == $valor) {
$bstring = True;
} else {
$bstring = False;
}
}
?>
<table>
<tr>
<td>
<?php
if (is_numeric($valor)) {
if ($bnumeric) {
echo "El número ". $valor. " es capicúa";
} else {
echo "El número ". $valor. " no es capicúa";
}
} else {
if ($bstring) {
echo "La palabra ". $valor. " es un palíndromo";
} else {
echo "La palabra ". $valor. " no es un palíndromo";
}
}
?>
</td>
</tr>
</body>
</html>
_________________________________________________________________________
En este caso se trata de un cambio en el anterior para que, en caso de ser una cadena de letras, no se distingan la mayúsculas y las minúsculas (como el formulario es el mismo que en el caso anterior, sólo se pondrá el código PHP del procesado de datos).
<!DOCTYPE html>
<html>
<body>
<?php
$valor = $_GET ["valor"];
if (is_numeric ($valor)) {
$result = "";
for ($i = strlen($valor) - 1; $i >= 0; $i--) {
$result.=$valor[$i];
}
if ($result == $valor) {
$bnumeric = True;
} else {
$bnumeric = False;
}
} else {
$valor = strtoupper($valor);
$largo = strlen ($valor);
$inverso = "";
for ($i = ($largo - 1); $i >= 0; $i--) {
$inverso.=$valor[$i];
}
if ($inverso == $valor) {
$bstring = True;
} else {
$bstring = False;
}
}
?>
<table>
<tr>
<td>
<?php
if (is_numeric($valor)) {
if ($bnumeric) {
echo "El número ". $valor. " es capicúa";
} else {
echo "El número ". $valor. " no es capicúa";
}
} else {
if ($bstring) {
echo "La palabra ". $valor. " es un palíndromo";
} else {
echo "La palabra ". $valor. " no es un palíndromo";
}
}
?>
</td>
</tr>
</body>
</html>
_________________________________________________________________________
En este programa se enviará un texto desde un formulario y el programa devolverá la cantidad de cada vocal que hay en él.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contar vocales</title>
</head>
<body>
<p>Introduce una cadena</p>
<form action="cuentavocales.php">
<input type="text" name="cadena">
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function contarVocales($cadena) {
$vocales = array("a" => 0,
"e" => 0,
"i" => 0,
"o" => 0,
"u" => 0);
for ($j = 0; $j < strlen($cadena); $j++) {
switch ($cadena[$j]) {
case 'a':
case 'á':
case 'A':
case 'Á':
$vocales["a"]++;
break;
case 'e':
case 'é':
case 'E':
case 'É':
$vocales["e"]++;
break;
case 'i':
case 'í':
case 'I':
case 'Í':
$vocales["i"]++;
break;
case 'o':
case 'ó':
case 'O':
case 'Ó':
$vocales["o"]++;
break;
case 'u':
case 'ú':
case 'U':
case 'Ú':
case 'ü':
case 'Ü':
$vocales["u"]++;
break;
}
}
return $vocales;
}
$cadena = $_GET["cadena"];
echo "En la cadena $cadena <br/>";
$vocales = contarVocales($cadena);
foreach ($vocales as $vocal => $valor) {
echo "La $vocal aparece $valor veces <br/>";
}
?>
_________________________________________________________________________
En este ejemplo se partirá del anterior y el programa devolverá el resultado en una matriz asociativa (como el formulario es el mismo que el del ejemplo anterior, sólo se pondrá aquí el código PHP del procesado de datos).
<?php
function contarVocales($cadena) {
$vocales = array("a" => 0,
"e" => 0,
"i" => 0,
"o" => 0,
"u" => 0);
$cadena = strtolower($cadena); //Paso la cadena a minúsculas
$longitud = strlen($cadena);
for ($j = 0; $j < $longitud; $j++) {
switch ($cadena[$j]) {
case 'a':
case 'á':
$vocales["a"]++;
break;
case 'e':
case 'é':
$vocales["e"]++;
break;
case 'i':
case 'í':
$vocales["i"]++;
break;
case 'o':
case 'ó':
$vocales["o"]++;
break;
case 'u':
case 'ú':
case 'ü':
$vocales["u"]++;
break;
}
}
return $vocales;
}
$cadena = $_GET["cadena"];
echo "En la cadena $cadena <br/>";
$vocales = contarVocales($cadena);
foreach ($vocales as $vocal => $valor) {
echo "La $vocal aparece $valor veces <br/>";
}
?>
________________________________________________________________________
En este caso, el programa recibirá un texto a través de un formulario y devolverá la primera frase del mismo (hasta que encuentre un punto o llegue al final; lo que suceda antes).
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Obtener la primera frase</title>
</head>
<body>
<p>Introduce una cadena</p>
<form action="primerafrase.php">
<textarea name="texto" cols="30" rows="10"></textarea>
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
$texto = $_GET["texto"];
$posicionPunto = strpos($texto, ".");
if ($posicionPunto === FALSE) {
//No se ha encontrado el "."
$primeraFrase = $texto;
} else {
$primeraFrase = substr($texto, 0, $posicionPunto);
}
echo $primeraFrase;
?>
_________________________________________________________________________
El siguiente ejemplo contiene un programa que sustituye cada aparición de "ko" por "no" en un texto proporcionado desde un formulario.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Remplazo</title>
</head>
<body>
<p>Introduce un texto</p>
<form action="reemplazo.php">
<textarea name="texto" cols="30" rows="10"></textarea>
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
$texto = $_GET["texto"];
$textoSustutuido = str_replace("ko", "no", $texto);
echo $textoSustituido;
?>
________________________________________________________________________
El siguiente programa, basado en el anterior, recibirá del formulario tanto el texto a sustituir, como la cadena a buscar y la cadena por la que se sustituye.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Remplazo</title>
</head>
<body>
<p>Introduce un texto</p>
<form action="reemplazo.php">
<textarea name="texto" cols="30" rows="10"></textarea><br>
Texto a buscar: <input type="text" name="buscar"><br>
Remplazar por: <input type="text" name="reemplazar">
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
$texto = $_GET["texto"];
$buscar = $_GET["buscar"];
$remplazar = $_GET["reemplazar"];
$textoSustituido = str_replace($buscar, $reemplazar, $texto);
echo $textoSustituido;
?>
_________________________________________________________________________
El siguiente programa recibe dos cadenas desde un formulario y devuelve el número de letras finales que coinciden entre ellas.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Últimas letras</title>
</head>
<body>
<p>Introduce dos cadenas</p>
<form action="letrasFinales.php">
<input type="text" name="cadena1"><br>
<input type="text" name="cadena2">
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function letrasFinales($cadena1, $cadena2) {
$lonCadena1 = strlen($cadena1);
$lonCadena2 = strlen($cadena2);
if ($lonCadena1 < $lonCadena2) {
$lonMenor = $lonCadena1;
} else {
$lonMenor = $lonCadena2;
}
$contador = 0;
for ($i=1; $i < $lonMenor; $i++) {
if ($cadena1[$lonCadena1-$i] == $cadena2[$lonCadena2-$i]) {
$contador++;
} else {
break;
}
}
return $contador;
}
echo letrasFinales($_GET["cadena1"], $_GET["cadena2"]);
?>
_________________________________________________________________________
El programa de este ejemplo recibe, desde un formulario, el número completo de un DNI (letra incluída) como cadena, y devuelve la letra.
Formulario (HTML):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DNI</title>
</head>
<body>
<p>Cálculo de la letra del DNI</p>
<form action="10-dni.php">
<input type="text" name="dni"><br>
<input type="submit">
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function letraDNI($dni) {
$letras = "TRWAGMYFPDXBNJZSQVHLCKE";
return $letras[$dni % 23];
}
echo $_GET['dni'] . "-" . letraDNI($_GET['dni']);
?>
_________________________________________________________________________
En el siguiente ejemplo, el programa cuenta el número de palabras de un texto dado.
Formulario (HTML):
!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contador de palabras</title>
</head>
<body>
<form action="contarPalabras.php" method="GET">
<input type="text" name="texto"/>
<input type="submit" value="Enviar"/>
</form>
</body>
</html>
Procesado de datos (PHP):
<?php
function contarPalabra($cadena, $palabra) {
$contador = 0;
$inicio = 0;
$cadena = strtoupper($cadena);
$palabra = strtoupper($palabra);
$lonCadena = strlen($cadena);
$lonPalabra = strlen($palabra);
while (($posicion = strpos($cadena, $palabra, $inicio)) !== FALSE) {
$contador++;
$inicio = $posicion + $lonPalabra;
}
return $contador;
}
$cadena = $_GET["texto"];
echo $cadena;
echo "<br/>";
echo contarPalabra($cadena, "la");
?>
_________________________________________________________________________
Espero que esta entrada haya resultado interesante al lector. De ser así, aguardo que el lector la comente y/o la comparta, por favor.
No hay comentarios:
Publicar un comentario
Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.