comparazione stringhe in if (linguaggio c)
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- NicoMetal
- Linux 2.x
- Messaggi: 380
- Iscritto il: dom 2 mag 2010, 18:21
- Nome Cognome: Nicola
- Slackware: current64
- Kernel: 4.3
- Desktop: kde5 - FluxBox
- Località: Verona
comparazione stringhe in if (linguaggio c)
È possibile fare una comparazione di stringhe in un if?
una cosa del tipo:
char *p="ciao";
if( p == "ciao" )
...
una cosa del tipo:
char *p="ciao";
if( p == "ciao" )
...
- Blallo
- Packager
- Messaggi: 3302
- Iscritto il: ven 12 ott 2007, 11:37
- Nome Cognome: Savino Liguori
- Slackware: 14.2 / 12.2
- Kernel: 4.4.14-smp
- Desktop: DWM
- Località: Torino / Torremaggiore (FG)
- Contatta:
Re: comparazione stringhe in if (linguaggio c)
#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*.
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*.
Github: https://github.com/8lall0
- NicoMetal
- Linux 2.x
- Messaggi: 380
- Iscritto il: dom 2 mag 2010, 18:21
- Nome Cognome: Nicola
- Slackware: current64
- Kernel: 4.3
- Desktop: kde5 - FluxBox
- Località: Verona
Re: comparazione stringhe in if (linguaggio c)
Graziejimmy_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*.
- robbybby
- Linux 4.x
- Messaggi: 1223
- Iscritto il: sab 16 dic 2006, 10:48
- Slackware: 13.1 / 64 bit
- Kernel: 3.3.x
- Desktop: KDE 4.4.5
- Località: Fra Trantor e Terminus
Re: comparazione stringhe in if (linguaggio c)
Mi sa che ti sbagli.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*.
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
- Blallo
- Packager
- Messaggi: 3302
- Iscritto il: ven 12 ott 2007, 11:37
- Nome Cognome: Savino Liguori
- Slackware: 14.2 / 12.2
- Kernel: 4.4.14-smp
- Desktop: DWM
- Località: Torino / Torremaggiore (FG)
- Contatta:
Re: comparazione stringhe in if (linguaggio c)
Giusto.robbybby ha scritto:Mi sa che ti sbagli.
Github: https://github.com/8lall0
-
- Linux 0.x
- Messaggi: 3
- Iscritto il: mar 21 gen 2014, 22:53
Re: comparazione stringhe in if (linguaggio c)
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...
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...
-
- Linux 0.x
- Messaggi: 3
- Iscritto il: mar 21 gen 2014, 22:53
Re: comparazione stringhe in if (linguaggio c)
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
- robbybby
- Linux 4.x
- Messaggi: 1223
- Iscritto il: sab 16 dic 2006, 10:48
- Slackware: 13.1 / 64 bit
- Kernel: 3.3.x
- Desktop: KDE 4.4.5
- Località: Fra Trantor e Terminus
Re: comparazione stringhe in if (linguaggio c)
Codice: Seleziona tutto
char s[2];
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.
- Blallo
- Packager
- Messaggi: 3302
- Iscritto il: ven 12 ott 2007, 11:37
- Nome Cognome: Savino Liguori
- Slackware: 14.2 / 12.2
- Kernel: 4.4.14-smp
- Desktop: DWM
- Località: Torino / Torremaggiore (FG)
- Contatta:
Re: comparazione stringhe in if (linguaggio c)
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.
Oltretutto una stringa è un vettore di char. Quando compari un vettore di interi li comunque analizzi cella per cella, giusto?
Così per le stringhe.
Github: https://github.com/8lall0