Pagina 1 di 1

comparazione stringhe in if (linguaggio c)

Inviato: lun 11 giu 2012, 23:54
da NicoMetal
È possibile fare una comparazione di stringhe in un if?
una cosa del tipo:

char *p="ciao";

if( p == "ciao" )
...

Re: comparazione stringhe in if (linguaggio c)

Inviato: mar 12 giu 2012, 0:01
da Blallo
#include <string.h>

if (strcmp(p, "ciao) == 0))
{
...
}

PS: ricorda che anche un char senza asterisco è un puntatore ad un array di caratteri. Quindi, a meno che non vuoi allocare un vettore di stringhe, non usare il char*.

Re: comparazione stringhe in if (linguaggio c)

Inviato: mar 12 giu 2012, 0:28
da NicoMetal
jimmy_page_89 ha scritto:#include <string.h>

if (strcmp(p, "ciao) == 0))
{
...
}

PS: ricorda che anche un char senza asterisco è un puntatore ad un array di caratteri. Quindi, a meno che non vuoi allocare un vettore di stringhe, non usare il char*.
Grazie ;)

Re: comparazione stringhe in if (linguaggio c)

Inviato: mar 12 giu 2012, 4:44
da robbybby
jimmy_page_89 ha scritto:PS: ricorda che anche un char senza asterisco è un puntatore ad un array di caratteri. Quindi, a meno che non vuoi allocare un vettore di stringhe, non usare il char*.
Mi sa che ti sbagli.

Codice: Seleziona tutto

char *pStr = "pippo";  //ok: pStr è un puntatore a char
char c = "pippo";      //non ok: c è un carattere (un byte), non puoi assegnarlo a un puntatore, quale è "pippo"
//ma
char pStr1[10];        //ok: pStr1 è un puntatore a char, e allochi spazio per 10 caratteri. pStr1 punta al primo carattere dell'array allocato

Re: comparazione stringhe in if (linguaggio c)

Inviato: mar 12 giu 2012, 6:21
da Blallo
robbybby ha scritto:Mi sa che ti sbagli.
Giusto.

Re: comparazione stringhe in if (linguaggio c)

Inviato: mar 21 gen 2014, 23:38
da StaticKing
Ragazzi, ho un problema riguardante questo fatto: ho creato un programmino di prova così strutturato:

void main()
{
char s[2];
printf("Scrivi si se vuoi che venga scritto OK, no se vuoi che venga scritto KO\n");
scanf("%s",s);
if (s=="si") printf("OK\n");
else printf("KO\n");
printf("%s %c %c\n",s,s[0],s[1]);
system("pause");
}

E' molto semplice, dovrebbe scrivere "OK" se scrivo "si" in riga di comando, "KO" altrimenti, prende in ingresso una stringa di due caratteri. Il problema è che scrive sempre "KO" anche se scrivo si. L'ultimo printf l'ho messo per vedere se il problema era nella aquisizione di s tramite lo scanf, ma a quanto pare quella va bene perchè se scrivo "si", l'ultimo printf mi scrive "si s i". Non capisco dove sbaglio...

Re: comparazione stringhe in if (linguaggio c)

Inviato: mar 21 gen 2014, 23:59
da StaticKing
Problema risolto, con strcmp(s,"parola") come scritto sopra funziona, non mi è chiaro comunque come mai non si può fare semplicemente if (s=="parola"). E poi solitamente se una funzione con solo 2 output possibili (vero o falso) è vera, non si costruisce che dia valore di ritorno 1? Qui dà 0 se sono uguali... Va beh questo è solo un dettaglio comunque :-k

Re: comparazione stringhe in if (linguaggio c)

Inviato: mer 22 gen 2014, 0:34
da Toni

Re: comparazione stringhe in if (linguaggio c)

Inviato: mer 22 gen 2014, 0:53
da robbybby

Codice: Seleziona tutto

char s[2];
Così allochi spazio per 2 caratteri, ma "si" e "no" sono stringhe lunghe 3 caratteri, a causa del NULL terminator, quindi stai ottenendo un bellissimo stack overflow :)
strcmp() ritorna:
0 se le due stringhe sono uguali
<0 se la prima stringa è lessicograficamente minore della seconda (più corta, oppure precede alfabeticamente la seconda).
>0 se la prima stringa è lessicograficamente maggiore della seconda (più lunga, oppure segue alfabeticamente la seconda).

Quindi non si limita a restituire 0/non 0.

Re: comparazione stringhe in if (linguaggio c)

Inviato: mer 22 gen 2014, 0:54
da Blallo
Il nome di una variabile char è un puntatore, per questo non sono comparabili.
Oltretutto una stringa è un vettore di char. Quando compari un vettore di interi li comunque analizzi cella per cella, giusto?
Così per le stringhe. :)