Funciones de Manipulación de Cadenas en C: Comparar, Concatenar, Convertir y Medir Strings
Implementación de funciones para manipulación de cadenas en C
A continuación se presentan implementaciones propias de las funciones básicas de manejo de cadenas de caracteres en lenguaje C, equivalentes a algunas funciones de la biblioteca estándar string.h.
1. Comparación de cadenas (strcomp)
La función strcomp compara dos cadenas carácter por carácter. Devuelve 0 si son iguales, un valor positivo si la primera cadena es mayor y un valor negativo si es menor.
#include <stdio.h>
int strcomp(char* cadena, const char* cadena2){
int i = 0, resultado = 0;
while(cadena[i] != '\0'){
resultado = cadena[i] - cadena2[i];
printf("cadena 1 = %d\ncadena 2 = %d\n", cadena[i], cadena2[i]);
if(resultado != 0)
return resultado;
else if(cadena[i] != '\0' && cadena2[i] == '\0')
return +1;
i++;
}
if(cadena[i] == '\0' && cadena2[i] == '\0')
return 0;
else
return -1;
}
int main(){
char string[100], string2[100];
int resultado;
printf("Ingrese el string: ");
fflush(stdin);
gets(string);
printf("Ingrese el string: ");
fflush(stdin);
gets(string2);
resultado = strcomp(string, string2);
printf("%d", resultado);
fflush(stdin);
getchar();
return 0;
}2. Concatenación de cadenas (strconcat)
La función strconcat añade el contenido de la segunda cadena al final de la primera. Para ello, primero localiza el carácter nulo de cadena1 y después copia los caracteres de cadena2.
#include <stdio.h>
#include <string.h>
void strconcat(char* cadena1, const char* cadena2){
int i = 0, j = 0;
while(cadena1[i] != '\0')
i++;
while(cadena2[j] != '\0'){
cadena1[i] = cadena2[j];
j++;
i++;
}
cadena1[i] = '\0';
}
int main(){
char string1[20] = "Hola ";
char string2[7] = "amigos";
printf("String número 1 = %s\t", string1);
printf("String número 2 = %s\n", string2);
strconcat(string1, string2);
printf("String resultante = %s\n", string1);
fflush(stdin);
getchar();
return 0;
}3. Conversión a mayúsculas (strupper)
La función strupper recorre la cadena y convierte cada letra minúscula (códigos ASCII 97 a 122) en su equivalente mayúscula, restando 32 a su valor.
#include <stdio.h>
void strupper(char* string){
int i = 0;
while(string[i] != '\0'){
if(string[i] >= 97 && string[i] <= 122)
string[i] = string[i] - 32;
i++;
}
}
int main(){
char string[100];
printf("Ingrese cadena a convertir en mayúscula\n");
fflush(stdin);
gets(string);
strupper(string);
printf("Cadena convertida a mayúscula: %s\n", string);
fflush(stdin);
getchar();
return 0;
}4. Conversión a minúsculas (strlower)
La función strlower realiza el proceso inverso: convierte las letras mayúsculas (códigos ASCII 65 a 90) en minúsculas, sumando 32 a su valor.
#include <stdio.h>
void strlower(char* string){
int i = 0;
while(string[i] != '\0'){
if(string[i] >= 65 && string[i] <= 90)
string[i] = string[i] + 32;
i++;
}
}
int main(){
char string[100];
printf("Ingrese cadena a convertir en minúscula\n");
fflush(stdin);
gets(string);
strlower(string);
printf("Cadena convertida a minúscula: %s\n", string);
fflush(stdin);
getchar();
return 0;
}5. Copia de cadenas (strcopy)
La función strcopy copia el contenido de la cadena fuente en la cadena destino, incluyendo el carácter nulo de terminación.
#include <stdio.h>
void strcopy(char *destino, char *fuente){
int i;
for(i = 0; fuente[i] != '\0'; i++)
destino[i] = fuente[i];
destino[i] = '\0';
}
int main(){
char fuente[100] = "hola mundo", destino[100];
strcopy(destino, fuente);
printf("fuente: %s\n", fuente);
printf("destino: %s\n", destino);
fflush(stdin);
getchar();
return 0;
}6. Longitud de una cadena (strlength)
La función strlength cuenta los caracteres de la cadena hasta encontrar el carácter nulo '\0', que marca el final de la misma.
#include <stdio.h>
int strlength(char *string){
int i;
for(i = 0; string[i] != '\0'; i++);
return i;
}
int main(){
char string[100];
int largo;
printf("Ingrese el string: ");
fflush(stdin);
gets(string);
largo = strlength(string);
printf("La longitud del string es: %d", largo);
fflush(stdin);
getchar();
return 0;
}Observaciones
- La función
gets()es insegura, ya que no verifica el tamaño del búfer. En entornos modernos se recomienda usarfgets(). - El uso de
fflush(stdin)tiene comportamiento indefinido según el estándar de C; se emplea aquí únicamente con fines didácticos. - La función strcomp incluye una instrucción
printfde depuración que muestra los valores comparados en cada iteración; puede eliminarse en una versión final.