PDA

View Full Version : [C] Eliminare ultimo spazio vuoto di una stringa


Negative_creep
16-11-2010, 17:08
Ciao a tutti, vorrei sapere come è possibile eliminare l'ultimo spazio vuoto " " di una stringa che contiene all'interno diversi valori separati a loro volta da spazio vuoto.

Es.

"a b c d e f g " presa da file txt con il comando fgets(stringa,500,f);

ho bisogno che la stringa sia "a b c d e f g" senza spazio vuoto alla fine.

Come posso fare?

Ho provato con questa istruzione

lungh=strlen(stringa);
stringa2 = strncpy(riga,stringa,lungh-2); // perchè così non conto " " e EOF

ma la cosa mi funziona solo in parte, nel senso che per alcune righe del file è tutto ok, per altre invece (3 righe su 8) c'è uno 0 che viene appiccicato alla fine del secondo ciclo e mi sballa alcuni risultati. :help:

Supdario
16-11-2010, 17:49
Se la stringa si trova sulla variabile "stringa":

if (stringa[strlen(stringa)-1] == ' ') stringa[strlen(stringa)-1] = '\0'

Non fa altro che trovare se l'ultimo carattere è uno spazio, e se lo è lo sostituisce con un terminatore di stringa.

Negative_creep
16-11-2010, 19:25
Grazie davvero per l'aiuto Supdario, non ne uscivo più ;)

lefantome
16-11-2010, 21:05
Se la stringa si trova sulla variabile "stringa":

if (stringa[strlen(stringa)-1] == ' ') stringa[strlen(stringa)-1] = '\0'

Non fa altro che trovare se l'ultimo carattere è uno spazio, e se lo è lo sostituisce con un terminatore di stringa.

si ma così lasci un char inutilizzato in giro.

Dovresti crearti una nuova stringa di lunghezza-1 e copiarci l'altra senza lo spazio.

Negative_creep
17-11-2010, 09:23
si ma così lasci un char inutilizzato in giro.

Dovresti crearti una nuova stringa di lunghezza-1 e copiarci l'altra senza lo spazio.

Si hai ragione lefantome, però assegno alla variabile "stringa" ad ogni ciclo, una riga del file in txt " stringa[strlen(stringa)-2] = '\0' " (-2 perchè altrimenti mi legge anche lo 0 di fine stringa con fgets) e poi quando avrò finito
farò la free(stringa) non è proprio elegante come cosa ma è meglio che allocare una nuova variabile e copiarci ad ogni ciclo una stringa castrata. Spero che comunque non mi dia problemi su file con tante righe.

Supdario
17-11-2010, 14:05
si ma così lasci un char inutilizzato in giro.

Dovresti crearti una nuova stringa di lunghezza-1 e copiarci l'altra senza lo spazio.

Se proprio si vuole ridurre la stringa basta usare realloc, esempio:


char *stringa = "Sono una stringa ";
int len = strlen(stringa)-1;
if (stringa[len] == ' ')
{
stringa[len] = '\0';
stringa = (char *) realloc(stringa, sizeof(char)*len);
}