|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
[C]comportamento strano con le stringhe?!?!?cosa ne pensate
ragazzi ho da fare un esercizio ke mi dica la parola più lunga e l'indice corrispondente nel array...
#include <stdio.h> #include<stdlib.h> #include <string.h> void funzionestringa(char stringa[]); void main() { char STRINGA[]="Oggi sono andato a giocare e poi a fare una passeggiata"; printf("%s",STRINGA); funzionestringa(STRINGA); } void funzionestringa(char stringa[]) { int i,max,conta,indice_max; i=0; conta=0; max=0; while(stringa[i]!='\0') { while(stringa[i]!=' ') { conta=i;//memorizzo l'indice delle parole i++; } if(conta>max) { max=conta; indice_max=i; } i++; } printf("\nmax:%d, indice_max:%d ",max,indice_max); } -----lasiciamo perdere un attimo il risultato reale ke mi deve uscire....il problema è che a quanto ho notato facendo un aattento debug....il while ke mi dovrebbe controllare la fine della stringa (while(stringa[i]!='\0')), in realtà non me lo fa ma va in overflow....come mai???
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Io la funzione la farei così:
Codice:
void statistica_stringa (char *stringa)
{
int i = 0, c = 0, len_max = 0, idx = 0, idx_max = -1;
do {
if (stringa[i] == ' ' || stringa[i] == '\0')
{
if (c > 0 && c > len_max)
{
len_max = c;
idx_max = idx;
}
c = 0;
}
else
{
if (c == 0)
idx = i;
c++;
}
} while (stringa[i++] != '\0');
printf ("lunghezza_max:%d, indice_max:%d\n", len_max, idx_max);
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
ok ho capito...ma il modo in cui l'avevo impostata io anke se magari un po' più artic0olato mi mavrebbe portato cmq al risultato...la cosa ke nn mi è kiara come mai il while non mi fa uscire dall'array
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ti va in overflow perchè il while interno si ferma allo spazio, ma non lo trova e continua oltre... Il while interno lo devi fare terminare anche quando trovi il carattere di fine stringa.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
se il secondo while lo scrivo così ...while(stringa[i]!=' '||stringa[i]!='\0')
in esecuzione im da un errore ....come diavolo è possibile?
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai un po' sbagliato il ciclo interno...
"conta" lo devi azzerare ogni volta che entri nel ciclo esterno ed incrementarlo insieme ad "i" nel ciclo interno. Così come fai ora "conta" è uguale a "i". |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
scsua questa è il mio codice ma attualmente mi da errore in eecuzione...
void funzionestringa(char stringa[]) { int i,max,conta,indice_max; i=0; conta=0; max=0; while(stringa[i]!='\0') { while(stringa[i]!=' '||stringa[i]!='\0') { conta=i;//memorizzo l'indice delle parole i++; } if(conta>max) { max=conta; indice_max=i; } i++; } printf("\nmax:%d, indice_max:%d ",max,indice_max); } me lo puoi correggere tu l'errore
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Te l'ho spiegato, devi azzerare conta prima di entrare nel ciclo interno, ed incrementarlo nel ciclo interno. Così come hai fatto te conta è sempre uguale a i. Per il resto mi sembra che vada bene.
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ahhhh....
while(stringa[i]!=' ' && stringa[i]!='\0') |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:32.



















