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.
#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 "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.
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!!!
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

Seraphinux
noviembre 21, 2008
Luciano excelente complemento lo de la biblioteca dinámica
en unos días pondré en mi blog las otras funciones que tuve que armar para el tedioso manejo de cadenas :S
Saludos!!!!
Luciano
noviembre 21, 2008
Excelente! Muchas gracias por el comentario.
Estaré esperando nuevas funciones.
Saludos!
Corto
agosto 22, 2010
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.
Hector Murcia
noviembre 26, 2011
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;
}