Ciao,Originariamente inviato da NeoArgo
!!!! ADDIRITTURA SE SCRIVO IL MIO NOME "NICOLA" MI CONTA 4 CARATTERI!!!![]()
UFFA!!![]()
se ti puo' consolare ho provato io stesso questo codice e non funziona:
al posto dell'istruzione char *str=Memo1->Lines->Text.c_str(); //che estrapola tutto il contenuto del memo
ho inserito questa:
char *str=Memo1->Lines->Strings[0].c_str(); //in questo caso la prima riga
//e poi le istruzioni
int cont=0;
while (*str++) { //calcola che così fatto il ciclo salta il primo carattere, poiche' vi e' l'incremento
if (*str!='0') //dovresti togliere il carattere '\' dal tuo controllo
cont++;
}
ShowMessage("caratteri: "+IntToStr(cont));
ebbene, mi stampa il valore intero 1. In pratica il ciclo effettua una sola iterazione.
Allora: ho tutti e due abbiamo dimenticato l'artimetica dei puntatori, o non saprei proprio cosa e' successo.
ho provato anche a scrivere il ciclo così:
int i=0;
while (*(str+i)) {
.......
i++
}
ma non va lo stesso.
In alternativa ti posto questo codice, ti garantisco al 1000% che funziona, e un pezzo di codice che avevo scritto
per il Builder molto tempo fa:
unsigned int contline, cont, i, j;
cont=0;
AnsiString linea;
contline=reText->Lines->Count;
for (i=0; i<contline; i++)
{
//memorizzo una riga alla volta e la scorro
linea=reText->Lines->Strings[i];
for (j=1; j<linea.Length(); j++)
{
if (linea[j]>='a' && linea[j]<='z' || linea[j]>='A' && linea[j]<='Z' || linea[j]>='0' && linea[j]<='9')
cont++;
}
}
MessageDlg("Il documento contiene:\n"+IntToStr(reText->GetTextLen())+" caratteri,\ndi cui "+cont+" di solo
testo in \n"+contline+" righe totali",mtInformation, TMsgDlgButtons()<<mbOK, 0);
Come puoi notare, conto i caratteri, i caratteri di testo semplice e le righe totali.
Con le opportune modifiche puoi estrarre quello che ti serve.
Fammi sapere.
Se c'è qualcuno che vuole illuminarci sul ciclo while, ci farà ad entrambi un grande favore!

Rispondi quotando