Fundamentos

Tutorial Fundamentos: Cadenas de caracteres

PSeInt: Aprende a declarar y manipular cadenas, concatenar textos y realizar operaciones para mejorar tus habilidades de programación.

Aprende Fundamentos GRATIS y certifícate

Declaración y manipulación de cadenas

Las cadenas de caracteres son una estructura fundamental en programación para manejar texto. En PSeInt, las cadenas se declaran asignando un valor textual a una variable, sin necesidad de especificar el tipo de dato explícitamente.

Por ejemplo, para declarar una cadena y asignarle un valor:

Algoritmo DeclararCadena
    mensaje <- "Hola, mundo"
    Escribir mensaje
FinAlgoritmo

En Python, el código equivalente sería:

def declarar_cadena():
    mensaje = "Hola, mundo"
    print(mensaje)

La variable mensaje contiene ahora la cadena "Hola, mundo". En ambos casos, se puede utilizar la variable para operaciones posteriores, como mostrar su contenido en pantalla.

Para concatenar cadenas, es decir, unir dos o más cadenas en una sola, se utiliza el operador + en PSeInt:

Algoritmo ConcatenarCadenas
    saludo <- "Hola"
    nombre <- "Carlos"
    mensaje <- saludo + ", " + nombre + "!"
    Escribir mensaje
FinAlgoritmo

En Python, la concatenación se realiza de manera similar:

def concatenar_cadenas():
    saludo = "Hola"
    nombre = "Carlos"
    mensaje = saludo + ", " + nombre + "!"
    print(mensaje)

La concatenación es útil para construir mensajes dinámicos y personalizar salidas según las necesidades del programa.

Para obtener la longitud de una cadena en PSeInt, se utiliza la función Longitud():

Algoritmo LongitudCadena
    texto <- "Programación"
    tamaño <- Longitud(texto)
    Escribir "La palabra tiene ", tamaño, " letras."
FinAlgoritmo

En Python, se emplea la función len():

def longitud_cadena():
    texto = "Programación"
    tamaño = len(texto)
    print("La palabra tiene", tamaño, "letras.")

Cuando se necesita acceder a un carácter específico dentro de una cadena, PSeInt proporciona la función SubCadena(cadena, inicio, fin). Por ejemplo, para obtener el tercer carácter:

Algoritmo AccederCaracter
    palabra <- "Algoritmo"
    tercerCaracter <- SubCadena(palabra, 3, 3)
    Escribir "El tercer carácter es: ", tercerCaracter
FinAlgoritmo

En Python, se accede utilizando índices, recordando que el primer carácter tiene el índice 0:

def acceder_caracter():
    palabra = "Algoritmo"
    tercer_caracter = palabra[2]
    print("El tercer carácter es:", tercer_caracter)

La función SubCadena() también permite extraer una porción de la cadena especificando el rango de inicio y fin:

Algoritmo ExtraerSubcadena
    frase <- "Aprendiendo PSeInt"
    ejemploSubcadena <- SubCadena(frase, 1, 11)
    Escribir "La subcadena es: ", ejemploSubcadena
FinAlgoritmo

El equivalente en Python sería:

def extraer_subcadena():
    frase = "Aprendiendo PSeInt"
    ejemploSubcadena = frase[0:11]
    print("La subcadena es: ", ejemploSubcadena)

Para realizar operaciones más avanzadas de manipulación de cadenas, como convertir a mayúsculas o minúsculas, PSeInt no ofrece funciones integradas en el perfil flexible. Sin embargo, es posible implementar funciones personalizadas o considerar estas operaciones en un lenguaje como Python. Por ejemplo, en Python se puede convertir una cadena a mayúsculas utilizando upper():

def convertir_mayusculas():
    texto = "buenos días"
    texto_mayusculas = texto.upper()
    print(texto_mayusculas)

En PSeInt, estas transformaciones requieren lógica adicional y comprensión profunda de la manipulación de caracteres.

Otra operación común es la búsqueda de subcadenas dentro de una cadena. Aunque PSeInt no proporciona una función directa, se puede crear un algoritmo que recorra la cadena y verifique la presencia de una subcadena específica. En Python, existe el método find():

def buscar_subcadena():
    texto = "Bienvenidos al curso de PSeInt"
    posicion = texto.find("curso")
    if posicion != -1:
        print("La palabra 'curso' se encuentra en la posición", posicion)
    else:
        print("La palabra 'curso' no se encontró.")

La manipulación de cadenas es esencial para procesar y analizar información textual. Comprender cómo declarar y manejar cadenas en PSeInt proporciona una base sólida para abordar tareas más complejas en otros lenguajes de programación como Python.

Funciones comunes para el manejo de textos (concatenación, búsqueda)

La manipulación de cadenas es esencial para procesar y analizar información textual. En PSeInt, aunque el perfil flexible no ofrece una amplia gama de funciones integradas para el manejo de textos, es posible utilizar las herramientas disponibles para realizar operaciones comunes como la concatenación y la búsqueda dentro de cadenas.

Para la concatenación de cadenas, se puede utilizar el operador +, que ya hemos visto anteriormente. Sin embargo, cuando se necesita concatenar múltiples cadenas o valores numéricos, es importante asegurarse de que todos los elementos sean de tipo cadena. En PSeInt, podemos convertir números a cadenas utilizando la función ConvertirATexto().

Por ejemplo, para concatenar un texto con un número:

Algoritmo ConcatenarNumeroTexto
    edad <- 25
    mensaje <- "Tiene " + ConvertirATexto(edad) + " años."
    Escribir mensaje
FinAlgoritmo

En Python, la conversión de números a cadenas se realiza con la función str():

def concatenar_numero_texto():
    edad = 25
    mensaje = "Tiene " + str(edad) + " años."
    print(mensaje)

La función ConvertirATexto() es útil para evitar errores al combinar diferentes tipos de datos en una cadena.

Para la búsqueda de una subcadena dentro de una cadena en PSeInt, no existe una función integrada específica, podemos crear un algoritmo que recorra la cadena y verifique si la subcadena aparece en ella. A continuación se presenta un ejemplo de cómo implementar una función personalizada para buscar una subcadena en Python utilizando el método find():

def buscar_subcadena():
    cadena = "Aprender a programar es divertido."
    subcadena = "programar"
    posicion = cadena.find(subcadena)
    if posicion != -1:
        print("La subcadena se encontró en la posición", posicion)
    else:
        print("La subcadena no se encontró.")

El método find() devuelve la posición inicial de la primera ocurrencia de la subcadena o -1 si no la encuentra. Esto facilita la búsqueda de textos dentro de cadenas en Python.

Otra operación común es contar las ocurrencias de un carácter o subcadena en una cadena. Este algoritmo cuenta cuántas veces aparece la subcadena en la cadena principal. En Python, existe el método count() que simplifica esta tarea:

def contar_ocurrencias():
    cadena = "banana"
    subcadena = "a"
    contador = cadena.count(subcadena)
    print("La subcadena '", subcadena, "' aparece", contador, "veces.")

La función count() es una herramienta poderosa para analizar frecuencias de caracteres o palabras en textos.

La reemplazo de subcadenas es otra operación útil. En Python, el método replace() hace esto de manera directa:

def reemplazar_subcadena():
    cadena = "La vida es bella"
    subcadena = "bella"
    reemplazo = "maravillosa"
    cadena = cadena.replace(subcadena, reemplazo)
    print(cadena)

La función replace() facilita la modificación de textos sin necesidad de escribir algoritmos adicionales.

Finalmente, es común necesitar eliminar espacios adicionales o caracteres no deseados. En Python, se utiliza el método strip():

def eliminar_espacios():
    cadena = "   Hola mundo   "
    cadena = cadena.strip()
    print("'", cadena, "'")

La función strip() remueve los espacios en blanco al inicio y al final de la cadena, lo cual es útil para limpiar entradas de texto.

Comparación de cadenas y manejo de codificaciones

La comparación de cadenas es una operación fundamental en programación, especialmente al procesar y analizar textos. En PSeInt, podemos comparar cadenas para determinar si son iguales, diferentes o cuál es su orden lexicográfico. Esta comparación es crucial para la toma de decisiones y el control de flujo en un programa.

Para comparar si dos cadenas de caracteres son iguales o diferentes, utilizamos los operadores relacionales = y <> respectivamente. Es importante destacar que la comparación de cadenas en PSeInt es sensible a mayúsculas y minúsculas, lo que significa que "Casa" y "casa" se consideran distintas.

Por ejemplo, para verificar la igualdad de dos cadenas:

Algoritmo CompararCadenas
    cadena1 <- "Programación"
    cadena2 <- "programación"
    Si cadena1 = cadena2 Entonces
        Escribir "Las cadenas son iguales."
    SiNo
        Escribir "Las cadenas son diferentes."
    FinSi
FinAlgoritmo

En este caso, el resultado será "Las cadenas son diferentes." debido a la diferencia en el uso de mayúsculas. En Python, el código equivalente sería:

def comparar_cadenas():
    cadena1 = "Programación"
    cadena2 = "programación"
    if cadena1 == cadena2:
        print("Las cadenas son iguales.")
    else:
        print("Las cadenas son diferentes.")

Si deseamos comparar cadenas sin distinguir entre mayúsculas y minúsculas, es necesario normalizarlas. En PSeInt, podemos convertir ambas cadenas a minúsculas o mayúsculas antes de compararlas. Aunque PSeInt no proporciona funciones integradas para cambiar el caso de las letras, podemos crear una función personalizada para este propósito.

En Python, podemos utilizar el método lower() para convertir las cadenas a minúsculas de forma sencilla:

def comparar_sin_distincion_mayusculas():
    cadena1 = "Programación"
    cadena2 = "programación"
    if cadena1.lower() == cadena2.lower():
        print("Las cadenas son iguales (ignorando mayúsculas).")
    else:
        print("Las cadenas son diferentes.")

Además de la igualdad, en ocasiones necesitamos determinar el orden lexicográfico entre dos cadenas, es decir, cuál aparece antes en un diccionario. En PSeInt, podemos utilizar los operadores <, >, <= y >= para comparar cadenas en este contexto.

Por ejemplo:

Algoritmo OrdenLexicografico
    palabra1 <- "manzana"
    palabra2 <- "naranja"
    Si palabra1 < palabra2 Entonces
        Escribir palabra1, " viene antes que ", palabra2
    SiNo
        Escribir palabra2, " viene antes que ", palabra1
    FinSi
FinAlgoritmo

Este algoritmo determinará cuál de las dos palabras precede a la otra alfabéticamente. En Python, el código equivalente es:

def orden_lexicografico():
    palabra1 = "manzana"
    palabra2 = "naranja"
    if palabra1 < palabra2:
        print(f"{palabra1} viene antes que {palabra2}")
    else:
        print(f"{palabra2} viene antes que {palabra1}")

Es fundamental recordar que la ordenación lexicográfica también es sensible a mayúsculas y minúsculas. Para obtener una comparación consistente, es recomendable normalizar las cadenas antes de compararlas.

En cuanto al manejo de codificaciones, debemos ser conscientes de cómo se representan internamente los caracteres en un programa. PSeInt utiliza principalmente la codificación ASCII, que soporta caracteres básicos pero tiene limitaciones con caracteres especiales y acentuados. Al trabajar con caracteres como "ñ", "á" o "ü", podríamos enfrentar problemas si la codificación no los soporta adecuadamente.

Por ejemplo, al usar caracteres especiales en PSeInt:

Algoritmo CaracteresEspeciales
    mensaje <- "Feliz cumpleaños"
    Escribir mensaje
FinAlgoritmo

Si al ejecutar el programa obtenemos símbolos extraños, es probable que exista un problema de codificación de caracteres. Esto se debe a que el entorno de PSeInt puede no interpretar correctamente caracteres fuera del estándar ASCII.

En Python, a partir de la versión 3, las cadenas se manejan en Unicode por defecto, lo que permite un amplio soporte de caracteres internacionales:

def caracteres_especiales():
    mensaje = "Feliz cumpleaños"
    print(mensaje)

Para evitar inconvenientes en PSeInt, es aconsejable limitar el uso de caracteres especiales o configurar el programa para soportar codificaciones como UTF-8 si es posible.

Al comparar cadenas que contienen caracteres acentuados o especiales, debemos tener en cuenta cómo la codificación afecta la comparación. Por ejemplo:

Algoritmo CompararConAcentos
    palabra1 <- "mañana"
    palabra2 <- "manana"
    Si palabra1 = palabra2 Entonces
        Escribir "Las palabras son iguales."
    SiNo
        Escribir "Las palabras son diferentes."
    FinSi
FinAlgoritmo

Aunque fonéticamente podrían ser similares, el programa considerará que las palabras son diferentes debido al carácter "ñ". En Python, podemos gestionar este tipo de comparaciones con mayor flexibilidad.

Para comparar cadenas ignorando acentos, es posible crear una función que elimine o reemplace los caracteres acentuados. En Python, podemos aprovechar las capacidades del módulo unicodedata para normalizar cadenas:

import unicodedata

def eliminar_acentos(texto):
    return ''.join(c for c in unicodedata.normalize('NFD', texto) if unicodedata.category(c) != 'Mn')

def comparar_sin_acentos():
    palabra1 = "mañana"
    palabra2 = "manana"
    if eliminar_acentos(palabra1) == eliminar_acentos(palabra2):
        print("Las palabras son iguales sin considerar acentos.")
    else:
        print("Las palabras son diferentes.")

El manejo adecuado de codificaciones es esencial al desarrollar programas que requieran compatibilidad internacional o que procesen textos de diversos orígenes. Aunque PSeInt tiene limitaciones en este aspecto, comprender estas diferencias prepara para enfrentarse a desafíos en lenguajes más avanzados.

Finalmente, al trabajar con cadenas y codificaciones, es vital asegurarse de que todos los componentes del programa (desde el editor hasta el entorno de ejecución) estén configurados para manejar correctamente los caracteres utilizados. Esto incluye establecer la codificación correcta en los archivos y utilizar fuentes que soporten los caracteres especiales necesarios.

Transformaciones y validación de entradas de texto

Las transformaciones de texto permiten modificar cadenas para cumplir con requisitos específicos o prepararlas para su procesamiento. La validación de entradas de texto es crucial para garantizar que los datos ingresados por el usuario sean correctos y seguros.

Una transformación común es invertir una cadena, lo que puede ser útil en ciertos algoritmos o análisis de palabras. En PSeInt, podemos implementar una función para invertir una cadena:

Funcion Invertir(cadena)
    Definir resultado Como Cadena
    resultado <- ""
    Para i <- Longitud(cadena) Hasta 1 Con Paso -1 Hacer
        resultado <- resultado + SubCadena(cadena, i, i)
    Fin Para

Fin Funcion

En Python, podemos utilizar el corte de cadenas para invertir el texto de forma sencilla:

def invertir_cadena():
    texto = "PSeInt"
    texto_invertido = texto[::-1]
    print("Texto original:", texto)
    print("Texto invertido:", texto_invertido)

Otra transformación es reemplazar caracteres específicos por otros, lo cual es útil para normalizar datos o eliminar caracteres no deseados. Por ejemplo, podríamos querer eliminar todos los espacios de una cadena:

Funcion EliminarCaracter(cadena, caracterAEliminar)
    Definir resultado, caracterActual Como Cadena
    resultado <- ""
    Para i <- 1 Hasta Longitud(cadena) Hacer
        caracterActual <- SubCadena(cadena, i, i)
        Si caracterActual <> caracterAEliminar Entonces
            resultado <- resultado + caracterActual
        Fin Si
    Fin Para
Fin Funcion

En Python, podemos usar el método replace() para lograr este objetivo:

def eliminar_espacios():
    texto = "El rápido zorro marrón"
    texto_sin_espacios = texto.replace(" ", "")
    print("Texto sin espacios:", texto_sin_espacios)

La validación de entradas de texto es esencial para asegurar que los datos proporcionados por el usuario cumplan con ciertos criterios. Por ejemplo, podríamos querer verificar si una cadena contiene solo dígitos, indicando que representa un número entero válido.

En PSeInt, podemos crear una función que revise si una cadena está compuesta únicamente por dígitos:

Funcion EsNumeroEntero(cadena)
    Definir esValido Como Logico
    esValido <- Verdadero
    
    Para i <- 1 Hasta Longitud(cadena) Hacer
        Definir caracterActual Como Cadena
        caracterActual <- SubCadena(cadena, i, i)
        
        // Verifica si NO está en rango '0'..'9'
        Si No(caracterActual >= "0" Y caracterActual <= "9") Entonces
            esValido <- Falso
        Fin Si
    Fin Para
Fin Funcion

En Python, podemos utilizar el método isdigit() para este propósito:

def validar_solo_digitos():
    entrada = input("Ingrese un número entero:")
    if entrada.isdigit():
        print("Entrada válida.")
    else:
        print("Entrada inválida. Solo se permiten números enteros.")

Otra transformación útil es convertir cadenas a números y viceversa. Esto es necesario cuando el usuario ingresa datos numéricos como texto y necesitamos realizar operaciones aritméticas.

En PSeInt, podemos convertir una cadena a número utilizando la función ConvertirANumero():

Funcion EsNumero(cadena)
    Definir i, puntos Como Entero
    puntos <- 0
    
    Para i <- 1 Hasta Longitud(cadena) Hacer
        Definir caracterActual Como Cadena
        caracterActual <- SubCadena(cadena, i, i)
        
        // Verifica si no está en '0'..'9'
        Si No(caracterActual >= "0" Y caracterActual <= "9") Entonces
            // Permitir un solo punto decimal
            Si caracterActual = "." Y puntos = 0 Entonces
                puntos <- 1
            Sino
                Retornar <- Falso
            Fin Si
        Fin Si
    Fin Para
    
    Retornar  <- Verdadero
Fin Funcion

En Python, podemos utilizar el manejo de excepciones para intentar convertir la cadena a número:

def convertir_cadena_a_numero():
    entrada = input("Ingrese un número:")
    try:
        numero = float(entrada)
        print("El doble del número es:", numero * 2)
    except ValueError:
        print("Entrada inválida. Debe ingresar un número.")

Las transformaciones y validaciones de texto son fundamentales para crear programas fiables y robustos. Al asegurarnos de que las entradas de los usuarios son correctas y al transformar los textos según las necesidades, mejoramos la calidad y seguridad de nuestras aplicaciones.

Para seguir leyendo hazte Plus

¿Ya eres Plus? Accede a la app

Plan mensual

19.00 € /mes

Precio normal mensual: 19 €
47 % DE DESCUENTO

Plan anual

10.00 € /mes

Ahorras 108 € al año
Precio normal anual: 120 €
Aprende Fundamentos GRATIS online

Todas las lecciones de Fundamentos

Accede a todas las lecciones de Fundamentos y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Fundamentos y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Declarar cadenas en PSeInt y Python.
  • Concatenar cadenas y crear mensajes dinámicos.
  • Calcular la longitud de una cadena.
  • Acceder a caracteres específicos en una cadena.
  • Realizar manipulaciones avanzadas como convertir a mayúsculas o buscar subcadenas.
  • Comprender la importancia de la manipulación de cadenas en la programación.