Entra

View Full Version : [C]comportamento strano con le stringhe?!?!?cosa ne pensate


Piojolopez2406
08-02-2007, 16:39
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???

andbin
08-02-2007, 17:01
Io la funzione la farei così:
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);
}

Piojolopez2406
08-02-2007, 17:17
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

cionci
08-02-2007, 18:38
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.

Piojolopez2406
08-02-2007, 18:46
se il secondo while lo scrivo così ...while(stringa[i]!=' '||stringa[i]!='\0')
in esecuzione im da un errore ....come diavolo è possibile?

cionci
08-02-2007, 18:53
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".

Piojolopez2406
08-02-2007, 18:56
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

cionci
08-02-2007, 19:06
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.

cionci
08-02-2007, 19:10
Ahhhh....

while(stringa[i]!=' ' && stringa[i]!='\0')