In questo articolo presento tre semplici funzioni per ripulire le stringhe C dagli spazi che precedono o seguono; chi lavora anche in Basic si sentirà a sua agio con questi tre prototipi:
char *rtrim(char *str);
char *ltrim(char *str);
char *trim(char *str);
La rtrim() ripulisce dagli spazi a destra, la ltrim() ripulisce dagli spazi a sinistra e la trim() ripulisce sia a destra che a sinistra; queste funzioni lavorano direttamente sulla stringa passata in input e, per comodità di utiizzo, restituiscono la stessa stringa come valore di ritorno.
Questo permette di scrivere, ad esempio:
printf(trim(miastringa));
anzichè
trim(miastringa);
printf(miastringa);
La prima funzione che prendiamo in esame è la rtrim() che presento qui sotto
char *rtrim(char *str)
{
size_t len;
char *p;
len = strlen(str);
if (len > 0)
{
p = str + len;
do
{
p--;
if (!isspace(*p))
break;
*p = '\0';
} while (p > str);
}
return str;
}
La rtrim() procede a ritroso dalla fine della stringa finchè trova un carattere che non è spazio oppure arriva all'inizio, spostando indietro il terminatore di stringa.
La funzione ltrim() è leggermente più complessa della rtrim() in quanto in presenza di spazi all''inizio è necessario spostare ("shiftare") a sinistra tutti i caratteri.
char *ltrim(char *str)
{
char *pstart;
char *p;
pstart = str;
while (isspace(*pstart))
pstart++;
if (pstart > str)
{
p = str;
while(*pstart)
{
*p = *pstart;
pstart++;
p++;
}
*p = '\0';
}
return str;
}
Infine, la funzione più semplice risulta la trim() che utilizza le due precedenti per rimuovere spazi sia a sinistra che a destra.
char *trim(char *str)
{
rtrim(str);
ltrim(str);
return str;
}
L'utilizzo di tali funzioni è molto semplice ma se avete qualche dubbio, non esitate a contattarmi! Buon lavoro!