PDA

Visualizza la versione completa : [c++]perchè il confronto di stringhe senza l'utilizzo di cstring


cleaner
15-12-2008, 22:57
bool termina(char a[5],char b[10])
{

for(int i=0;i<5;i++)
{
cin >> a[i];
}

for(int i=0;i<10;i++)
{
cin >> b[i];
}

for(int i=0;i<15;i++)
{
if(a[i] == b[i]== 0) cout << a[i]; //perchè non da errore?!
}
return 0;
}

ma perchè non da errore!? il confronto di stringhe si fa tramite la funzione strcmp di cstring se non sbaglio, la risposta è perchè questo in realtà è un array di caratteri?? e quindi non include /0
mi basta un si o un no ^^ lol

Infernal
15-12-2008, 23:14
non sono la persona più qualificata qui per rispondere... ma scusa.. che errore dovrebbe darti?

comunque in quell' if stai controllando se quei due caratteri sono diversi... (in maniera al quanto insolita) e se sono diversi stampi quello nella prima stringa.

Tu prima controlli se a[i] è uguale a b[i]... e se questo è uguale a 0 (cioè falso) esegui la cout..... quindi in poche parole se i due caratteri sono diversi.... ma in ogni caso non c'è nessun errore...

bye...

oregon
15-12-2008, 23:24
ma perchè non da errore!? il confronto di stringhe si fa tramite la funzione strcmp di cstring se non sbaglio

Il confronto delle stringhe si fa - per comodità - con la strcmp, ma la puoi fare tranquillamente confrontando "carattere per carattere", che e' poi quello che fa la strcmp !

Stai facendo un errore - questo sì - tentando di accedere ad elementi dei due vettori che non esistono ma puoi non avere errori evidenti perche' il programma va a leggere in memoria oltre gli array ...

Infernal
15-12-2008, 23:39
uhm... non avevo visto che il terzo for arrivava fino al 15... :D :D

menphisx
16-12-2008, 00:25
a[i] == b[i] == 0

Ricordati che l'espressione viene valutata da destra verso sinistra; quindi vale come:
a[i] == (b[i] == 0)

è vera quando a[i] è uguale ad uno e b[i] a zero.

oregon
16-12-2008, 07:44
Originariamente inviato da menphisx
... destra verso sinistra ...

Sei sicuro?

cleaner
16-12-2008, 12:34
nel terzo ciclo infatti facendolo da 0 a 15 mi vengono stampati caratteri insensati, ho ovviato con una soluzione alquanto discutibile, anche se funzionante: messa una condizione di if restringendo il campo tramite il relativo codice della tabella ascii..tuttavia se potete suggerirmi una soluzione migliore..

oregon
16-12-2008, 14:09
Originariamente inviato da cleaner
nel terzo ciclo infatti facendolo da 0 a 15 mi vengono stampati caratteri insensati

Ovviamente ...



, ho ovviato con una soluzione alquanto discutibile, anche se funzionante: messa una condizione di if restringendo il campo tramite il relativo codice della tabella ascii..

Non ho capito ... se mostri il codice ...


tuttavia se potete suggerirmi una soluzione migliore..

Per fare cosa, esattamente?

cleaner
16-12-2008, 19:01
include <iostream>


using namespace std;

bool termina(char a[5],char b[10])
{

for(int i=0;i<5;i++)
{
cin >> a[i];
}

for(int i=0;i<10;i++)
{
cin >> b[i];
}

for(int i=0;i<15;i++)
{
if(a[i] == b[i]== 0)
{
if(a[i] >=97 && a[i] <=122 && b[i] >=97 && b[i] <=122) cout << a[i]; //soluzione ascii
}
}
return 0;
}

oregon
16-12-2008, 19:55
Dovevi anche rispondere alla seconda domanda ... se non capisco cosa vorresti fare, a cosa mi serve vedere il codice?

Loading