Cadena – Es capicua ?

Lenguaje C

Una cadena es capicúa si se lee igual de izquierda a derecha que de derecha a izquierda. Es decir, si se invierte el orden de los caracteres de la cadena y se obtiene la misma cadena original.

Por ejemplo, la cadena «ama» es capicúa, ya que al invertir su orden, se obtiene «ama», que es la misma cadena original. En cambio, la cadena «hola» no es capicúa, ya que al invertir su orden se obtiene «aloh», que es diferente de la cadena original.

Para determinar si una cadena es capicúa en C, se pueden utilizar técnicas similares a las que se usan para determinar si un número es capicúa. Se puede recorrer la cadena y comparar el primer caracter con el último, el segundo con el penúltimo, y así sucesivamente, hasta llegar al centro de la cadena. Si todos los caracteres coinciden en ambos extremos, entonces la cadena es capicúa. Si en algún momento no coinciden, entonces la cadena no es capicúa.

Ejemplo:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>

void capicua(char* cadena_izquierda);


int main()
{
	char str[1024];

	printf("Introduce una frase para saber si es capicua o no:\n");
	scanf("%s", str);

	capicua(str);
}

void capicua(char* cadena_izquierda) 
{
	char* cadena_derecha;

	cadena_derecha = cadena_izquierda;

	while (*cadena_derecha != NULL)
	{
		cadena_derecha++; //Ultima posicion del array
	}

	cadena_derecha--;
	while (cadena_derecha > cadena_izquierda)
	{
		
		if (*cadena_derecha != *cadena_izquierda)
		{
			printf("No es capicua");
			return ;
		}

		cadena_izquierda++;
		cadena_derecha--;


	}

	printf("Es capicua");
}

Este programa en C determina si una cadena de caracteres es capicúa o no. El programa utiliza una función llamada capicua, que recibe un puntero a la cadena que se quiere analizar.

Primero, el programa incluye las librerías stdio.h y conio.h, y utiliza la directiva de preprocesador #define _CRT_SECURE_NO_WARNINGS para evitar errores al usar funciones inseguras como scanf.

En la función main, el programa pide al usuario que introduzca una cadena de caracteres utilizando la función scanf y la almacena en un array de caracteres llamado str. Luego, se llama a la función capicua pasándole como argumento el puntero a str.

La función capicua recibe como parámetro un puntero a la cadena que se quiere analizar (cadena_izquierda). Primero, se declara un puntero a caracteres llamado cadena_derecha y se iguala a cadena_izquierda.

Luego, se recorre la cadena desde cadena_izquierda hasta encontrar su última posición, y se almacena esa posición en cadena_derecha. Después, se decrementa cadena_derecha para que apunte a la posición anterior a la última posición de la cadena.

A continuación, se recorre la cadena desde ambos extremos (el puntero cadena_izquierda y cadena_derecha) hacia el centro, comparando los caracteres en cada posición. Si en algún momento los caracteres no coinciden, se imprime «No es capicua» y se sale de la función. Si se llega al centro de la cadena y todos los caracteres coinciden, se imprime «Es capicua».

Es importante mencionar que el programa no está completamente libre de problemas. Por ejemplo, al utilizar scanf para leer una cadena de caracteres, no se limita la cantidad de caracteres que se pueden introducir, lo que puede provocar un desbordamiento del array str. Además, la función conio.h no es una librería estándar de C y su uso puede no estar soportado en todas las plataformas.

Puede que también te guste...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *