|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
[C] Questa funzione toglie i blank ripetuti?!
Io l'ho scritta così, ma non mi pare fare quello che voglio.
Codice:
/* Compatta gli spazi delle notizie mal formate */
void layout(char *notizia)
{
int i=0, ii=0, op=0, size=strlen(notizia);
char supporto[size];
supporto[0]='\0';
while (notizia[i]!='\0')
{
if (notizia[i]!=' ')
{
supporto[ii]=notizia[i];
i++;
ii++;
op=0;
}
else {
if (op==0)
{
supporto[ii]=notizia[i];
i++;
ii++;
op++;
}
else i++;
}
}
supporto[ii]='\0';
strcpy(notizia, supporto);
}
Io la richiamo così: Codice:
layout(buffer2);
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Se ho capito bene, se nella stringa ci sono più spazi tra le parole, tu ne vuoi mettere solo 1, giusto??
Io farei così: Codice:
void compact_spaces (char *str)
{
char *wrt = str--;
int flag = 0;
do {
str++;
if (*str == ' ')
{
if (flag == 0)
{
flag = 1;
*wrt = *str;
wrt++;
}
}
else
{
flag = 0;
*wrt = *str;
wrt++;
}
} while (*str);
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 03-02-2007 alle 11:35. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Funziona bene, grazie.
EDIT Anzi mi pare di no.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. Ultima modifica di Matrixbob : 03-02-2007 alle 19:00. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Forse ho detto 1 cavolata, ma da qualche parte non ci deve essere:
*srt = *wrt; Al posto di: *wrt = *str; Altrimenti alla fine la stringa in entrata come fa a risultare modificata?! Forse la chiave di tutto è: char *wrt = str--; che mi indica che sto lavorando su 2 stringhe che però sono sovrapposte come celle di memoria?! Quindi modificando wrt alla fine ho modificato anche str?! Se è così allora 6 il mago delle ottimizzazioni.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. Ultima modifica di Matrixbob : 03-02-2007 alle 19:08. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
In pratica quando ci sono più spazi, 'wrt' si "ferma" mentre 'str' va comunque avanti. Quindi man mano che si va avanti, i caratteri vengono copiati più indietro. Spero di essermi spiegato in modo chiaro.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Quote:
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Hai mica sottomano anche una funzione che faccia anche, solo parte di, questo:
[C] Esiste funzione che trasforma HTML in TXT?! In pratica il testo HTML io lo ho già tutto caricato in 1 stringa in quanto è corto.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Eeehm
Ho 1 altro problema [C] Sostituire 1 sottostringa in 1 stringa: ho fatto questa funzione.. Ho provato a seguire la tua falsa riga, ma ho cannato...
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<< Più largo è il sorriso, più affilato è il coltello. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:34.



















