Funciones de Manipulación de Cadenas en C: Comparar, Concatenar, Convertir y Medir Strings

Informática y Telecomunicaciones5,46 KB

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 usar fgets().
  • 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 printf de depuración que muestra los valores comparados en cada iteración; puede eliminarse en una versión final.

Descargar

PDF Word HTML