Blog, para facilitar del Lenguaje de Programación C
Funciones de manejo de cadenas
Existen unas cuantas funciones el la biblioteca estándar de C para el manejo de cadenas:
strlen
strcpy
strcat
sprintf
strcmp
Para usar estas funciones hay que añadir la directiva:
#include <string.h>
strlen
Esta función nos devuelve el número de caracteres que tiene la cadena (sin contar el '\0').
#include <stdio.h>
#include <string.h>
int main()
{
char texto[]="Gorka";
int longitud;
longitud = strlen(texto);
printf( "La cadena \"%s\" tiene %i caracteres.\n", texto, longitud );
}
Crea tus propias funciones: Vamos a ver cómo se haría esta función si no dispusiéramos de ella. Si no te enteras cómo funciona consulta Recorrer cadenas con punteros.
#include <stdio.h>
#include <string.h>
int main()
{
char texto[]="Gorka";
char *p;
int longitud=0;
p = texto;
while (*p!='\0')
{
longitud++;
printf( "%c\n", *p ); /* Mostramos la letra actual */
p++; /* Vamos a la siguiente letra */
}
printf( "La cadena \"%s\" tiene %i caracteres.\n", texto, longitud );
}
Para medir la longitud de la cadena usamos un puntero para recorrerla (el puntero p). Hacemos que p apunte a texto. Luego entramos en un bucle while. La condición del bucle comprueba si se ha llegado al fin de cadena ('\0'). Si no es así suma 1 a longitud, muestra la letra por pantalla e incrementa el puntero en 1 (con esto pasamos a la siguiente letra).
strcpy
#include <string.h>
char *strcpy(char *cadena1, const char *cadena2);
Copia el contenido de cadena2 en cadena1. cadena2 puede ser una variable o una cadena directa (por ejemplo "hola"). Debemos tener cuidado de que la cadena destino (cadena1) tenga espacio suficiente para albergar a la cadena origen (cadena2).
#include <stdio.h>
#include <string.h>
int main()
{
char textocurso[] = "Este es un curso de C.";
char destino[50];
strcpy( destino, textocurso );
printf( "Valor final: %s\n", destino );
}
Vamos a ver otro ejemplo en el que la cadena destino es una cadena constante ("Este es un curso de C") y no una variable. Además en este ejemplo vemos que la cadena origen es sustituida por la cadena destino totalmete. Si la cadena origen es más larga que la destino, se eliminan las letras adicionales.
#include <stdio.h>
#include <string.h>
int main()
{
char destino[50] = "Esto no es un curso de HTML sino un curso de C.";
printf( "%s\n", destino );
strcpy( destino, "Este es un curso de C." );
printf( "%s\n", destino );
}
strcat
#include <string.h>
char *strcat(char *cadena1, const char *cadena2);
Copia la cadena2 al final de la cadena1.
#include <stdio.h>
#include <string.h>
int main()
{
char nombre_completo[50];
char nombre[]="Gorka";
char apellido[]="Urrutia";
strcpy( nombre_completo, nombre );
strcat( nombre_completo, " " );
strcat( nombre_completo, apellido );
printf( "El nombre completo es: %s.\n", nombre_completo );
}
Como siempre tenemos que asegurarnos que la variable en la que metemos las demás cadenas tenga el tamaño suficiente. Con la primera línea metemos el nombre en nombre_completo. Usamos strcpy para asegurarnos de que queda borrado cualquier dato anterior. Luego usamos un strcat para añadir un espacio y finalmente metemos el apellido.
sprintf
#include <stdio.h>
int sprintf(char *destino, const char *format, ...);
Funciona de manera similar a printf, pero en vez de mostrar el texto en la pantalla lo guarda en una variable (destino). El valor que devuelve (int) es el número de caracteres guardados en la variable destino.
Con sprintf podemos repetir el ejemplo de strcat de manera más sencilla:
#include <stdio.h>
#include <string.h>
int main()
{
char nombre_completo[50];
char nombre[]="Gorka";
char apellido[]="Urrutia";
sprintf( nombre_completo, "%s %s", nombre, apellido );
printf( "El nombre completo es: %s.\n", nombre_completo );
}
Se puede aplicar a sprintf todo lo que valía para printf.
strcmp
#include <string.h>
int strcmp(const char *cadena1, const char *cadena2);
Compara cadena1 y cadena2. Si son iguales devuelve 0. Un número negativo si cadena1 va antes que cadena2 y un número positivo si es al revés:
cadena1 == cadena2 -> 0
cadena1 > cadena2 -> número negativo
cadena1 < cadena2 -> número positivo
#include <stdio.h>
#include <string.h>
int main()
{
char nombre1[]="Gorka";
char nombre2[]="Pedro";
printf( "%i", strcmp(nombre1,nombre2));
}
toupper() y tolower() - Convertir a mayúsculas y minúsculas
La función tolower() nos permite convertir una cadena a minúsculas:
char *tolower( char *cadena );
toupper cumple la función contraria, convierte la cadena a mayúsculas:
char *toupper( char *cadena );