Algunas funciones útiles escritas en C

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
#include
#include
#include

#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

4 comentario en este artículoDeje el suyo
  1. Luciano excelente complemento lo de la biblioteca dinámica :P en unos días pondré en mi blog las otras funciones que tuve que armar para el tedioso manejo de cadenas :S

    Saludos!!!!

  2. Excelente! Muchas gracias por el comentario.

    Estaré esperando nuevas funciones.

    Saludos!

  3. Hola, muy buen blog.

    Pero solo un comentario, no le sobra a la función trim el ultimo ltrim.

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

    Saludos.

  4. Debes corregir tu código de isNumeric. Está operando al revés.

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

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

    return s;
    }

Deje su comentario

Por favor, ingrese su nombre

Por favor, ingrese un correo-e válido

Por favor, ingrese su mensaje

luauf.com 2012

WordPress