A continuación se adjunta librería para la manipulación avanzada de cadenas desde C.
No posee dependencias externas de otras librerías, e implementa las funciones más típicas para el trabajo con cadenas:
Se incluye fichero main.c con ejemplos de uso para algunas de las funciones principales de la librería.
Para un control cuidadoso de las cadenas, se ha definido la macro _MAX_STR_SIZE_ que controla el tamaño máximo de las cadenas.
int length(char* str);
Retorna el número de caracteres que conforma la cadena que se pasa como parámetro.
En caso de no encontrarse el final de cadena, o en caso de que el tamaño de la cadena exceda el valor indicado por _MAX_STR_SIZE_ se retorna _BASE_STRING_TO_BIG_.
void strToLower(char* baseString);
Pasa a minúsculas todas las letras que aparezcan en la cadena que se pasa como parámetro. El resto de los caracteres permanecen inalterados.
void cleanSpaces(char** baseStringPtr,unsigned char cleanOptions);
Elimina los espacios en blanco que aparezcan al comienzo y al final de la cadena pasada como parámetro.
Dependiendo del valor pasado a cleanOptions, se eliminarán los espacios por la derecha, por la izquierda o bien por ambos lados. Los valores posibles de cleanOptions son:
void cpyStr(char* source,char* destination);
Copia el contenido de la cadena source en la cadena destination.
La copia se hará efectiva siempre que el tamaño de las cadenas sea inferior al especificado por la macro _MAX_STR_SIZE_.
int cmpStr(char* string1, char* string2);
Realiza una comparación case-sensitive de las dos cadenas pasadas como parámetro.
En caso de ser iguales retorna _IDENTICAL_STRINGS_. En caso contrario retorna _DIFERENT_STRINGS_.
int append(char* newText,char* baseString);
Añade a la cadena baseString el contenido de la cadena newText.
La adición se hará efectiva si la suma de la longitud de ambas cadenas no excede el tamaño indicado por la macro _MAX_STR_SIZE_.
En caso contrario se devuelve -1.
int find(char* search,char* baseString, bool caseSensitive);
Realiza la búsqueda de la cadena search dentro de la cadena baseString.
Configurando el valor de caseSensitive a true obligas a que la búsqueda sea case-sensitive.
Si se encuentra la cadena search, se retorna la posición, dentro de la cadena baseString, en la que se produce la primera ocurrencia.
En caso contrario se devuelve _STRING_NOT_FOUND_.
int find2(char* search,char* baseString, int initialPos, int finalPos,bool caseSensitive);
Igual que find, salvo que en lugar de realizar la búsqueda desde el principio hasta el final de la cadena baseString, te permite especificar los límites de la búsqueda.
En caso de que los límites de la búsqueda esten mal especificados, se devuelve _FIND_ERROR_.
Si no se encuentra ninguna coincidencia se devuelve _STRING_NOT_FOUND_.
En caso contrario se devuelve la posición donde se encuentra la cadena buscada.
int subStr(char* baseString, char* subString,unsigned int initialPos);
Obtiene una subcadena subString a partir de la posición initialPos de la cadena baseString.
int splitWithChar(char* baseString, char separator, char* elements[]);
Divide la cadena baseString utilizando como separador el caracter separator.
La cadena original queda afectada, y los trozos obtenidos quedan referenciados por el array de punteros elements.
Se retorna el número de trozos en los que ha quedado dividida la cadena baseString.
En caso de que el número de trozos exceda el número indicado por la macro _MAX_SPLIT_ELEMENTS_, se retorna el error _TO_MANY_ELEMENTS_DETECTED_.
int split(char* baseString, char* separator, char* elements[]);
Igual que splitWithChar, salvo que se puede utilizar una cadena separadora en lugar de un único caracter.
void encodeB64(char *cadOrigen, char *cadDestino);
Codifica la cadena origen cadOrigen en base64 y el resultado lo vuelca a la cadena cadDestino.
signed char decodeB64(char *cadOrigen, char *cadDestino);
Decodifica la cadena origen cadOrigen, presuntamente codificada en base64, y el resultado lo vuelca a la cadena cadDestino.
Implementar función replace