Para quienes dan sus primeros pasos en C, pero que vienen de otros lenguajes de más alto nivel, se encontrarán con el faltante de varias funciones disponibles en otros lenguajes (ya sea como funciones o como métodos de algunas clases).

A continuación, pongo a vuestra disposición el código de algunas funciones que pueden resultar de utilidad: las clásicas funciones rtrim, ltrim y trim (para eliminar espacios a la derecha, izquierda y de ambos lados de una cadena) y de la función isNumeric para comprobar si un valor ingresado es numérico o no.

Además, para agregar un poco de valor agregado a la publicación convertiremos a estas funciones en una librería dinámica.

Los pasos a seguir son los siguientes:

  • Crear un archivo funciones.h con la declaración de las funciones a utilizar. Este header será utilizado, luego, por las aplicaciones que hagan uso de la librería dinámica.
#ifndef _LIBRERIA_FUNCIONES_H
#define _LIBRERIA_FUNCIONES_H
int isNumeric   (const char *val);
int isAlpha (const char *val);

char *rtrim (char *str);
char *ltrim (char *str);
char *trim  (char *str);
#endif

  • Crear un archivo funciones.c con la implementación de las funciones.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "funciones.h"
 
/*******************************************************************************
 *
 */

int isNumeric(const char *val)
{
    int i = 0, s = 0;

    for(i = 0; i <strlen(val); i++)
        if(isdigit(val[i]) == 0)
            s = -1;

    return s;
}
 

/*******************************************************************************
 *
 */

int isAlpha(const char *val)
{
    int i = 0, s = 0;

    for(i = 0; i <strlen(val); i++)
        if(isalnum(val[i]) == 0)
            s = -1;

    return s;
}

 
/*******************************************************************************
 *
 */

char *rtrim(char *str)
{
    char *endStr = 0;

    endStr = str + strlen(str) - 1;

    while( (endStr>= str) && (*endStr == ' '))
        *endStr-- = '\0';

    return str;
}
 

/*******************************************************************************
 *
 */

char *ltrim(char *str)
{
    char *startStr = 0;

    startStr = str;

    while(*startStr == ' ')
        startStr++;

    return startStr;
}

 
/*******************************************************************************
 *
 */

char *trim(char *str)
{
    return ltrim(rtrim(ltrim(str)));
}

  • Creamos un archivo Makefile para facilitar la compilación.
CFLAGS=-Wall

clean:
    rm libfunciones.so

libfunciones: funciones.c
    cc $(CFLAGS) -c -o funciones.o funciones.c
    ld -o libfunciones.so funciones.o -shared
    rm funciones.o

  • Finalmente, compilamos!!!
$ make libfunciones
cc -Wall -c -o funciones.o funciones.c
ld -o libfunciones.so funciones.o -shared
rm funciones.o
$

Para evitarles la tarea de copiar y pegar, pueden descargar los archivos anteriores aquí:

Para una próxima entrega, les estoy debiendo como utilizar esta librería dinámica desde otra aplicación.

Vía: Seraphinux