ciao,
come posso implementare uno switch che esegua un controllo su una variabile puntatore a char in modo da verificare che una variabile (array di char) contenga una determinata stringa?
grazie ciao
ciao,
come posso implementare uno switch che esegua un controllo su una variabile puntatore a char in modo da verificare che una variabile (array di char) contenga una determinata stringa?
grazie ciao
Non credo si possa fare lo switch su stringhe, devi usare una cascata di if-then-else,
Lo swirch su stringhe mi sembra che tu non lo possa fare, mentre lo puoi eseguire su caratteri (ponendo il case tra apici, es: 'a' ).
Io ho risolto il tuo stesso problema utilizzando solo la prima lettera della stringa... ovviamente ciò è stato possibile perchè ogni stringa dello switch iniziava in modo differente...
Ciaooooo
Gia', non lo puoi fare, perche' non puoi switchare un array, puoi switchare solo variabili....
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00
grazie per le risposte
la mia idea era quella di calcolare il valore hash di una stringa e confrontarlo con il valore hash di una stringa costante... il problema è che non posso scrivere una
cosa del genere:
switch(hash(stringa)){
case hash("ciao"):
istruzioni;
break;
perchè case vuole un'espressione costante.
Se vi viene in mente qualcosa per aggirare il problema postate pure
grazie tante
Lo switch non ti permette di inserire variabili nel case, quindi perchè non ritornare al vecchio ma più libertino if-else?
Ti posto il mio codice, che si potrebbe anche rivedere con un ciclo for.
codice:#include <stdio.h> int main() { char *nomi[] ={ "Luca", "Marco", "Anna" }; char **p = nomi; char parola[] = "Marco"; char *pt = parola; if(*pt == *nomi[0]) printf("Ciao Luca!"); else if(*pt == *nomi[1]) printf("Ciao Marco!"); else if(*pt == *nomi[2]) printf("Ciao Anna!"); else printf("Non ti conosco. Chi sei?"); getch(); return 0; }
versione riveduta e corretta:
nota...al posto di nomi[indice] potevi inserire il nome fra virgolette...esempio "Marco". L'importante per la strcmp è avere 2 puntatori costanti a caratterecodice:#include <stdio.h> int main() { char *nomi[] ={ "Luca", "Marco", "Anna" }; char **p = nomi; char parola[] = "Marco"; char *pt = parola; if(strcmp(pt, nomi[0]) == 0) printf("Ciao Luca!"); else if(strcmp(pt, nomi[1]) == 0) printf("Ciao Marco!"); else if(strcmp(pt, nomi[2]) == 0) printf("Ciao Anna!"); else printf("Non ti conosco. Chi caxxo sei?"); getch(); return 0; }
Perchè per confrontare le stringhe tramite la funzione strcmp() non utilizzi direttamente quella "iniziale" ma allochi un puntatore nel quale la riversi??Originariamente inviato da Lucked
versione riveduta e corretta:
nota...al posto di nomi[indice] potevi inserire il nome fra virgolette...esempio "Marco". L'importante per la strcmp è avere 2 puntatori costanti a caratterecodice:#include <stdio.h> int main() { char *nomi[] ={ "Luca", "Marco", "Anna" }; char **p = nomi; char parola[] = "Marco"; char *pt = parola; if(strcmp(pt, nomi[0]) == 0) printf("Ciao Luca!"); else if(strcmp(pt, nomi[1]) == 0) printf("Ciao Marco!"); else if(strcmp(pt, nomi[2]) == 0) printf("Ciao Anna!"); else printf("Non ti conosco. Chi caxxo sei?"); getch(); return 0; }
Altra cosa: perchè allochi un puntatore di puntatore (**p) ,su cui riversi *nomi[], se poi nn lo utilizzi?
Grazie mille!
Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...
Perchè secondo me se ci fossero già una decina di nomi da confrontare sarebbe meglio usare un ciclo for
questo si certo, per scorrere l'indice di *nomi[] con un indice che si incrementa...ma cosa c'entra tt cio' con il confronto,tramite la strcmp(),tra nomi e *pt,e non direttamente con parola[] ??Originariamente inviato da Lucked
Perchè secondo me se ci fossero già una decina di nomi da confrontare sarebbe meglio usare un ciclo for
E ancora : il fatto di riversare *nomi[] in **p a cosa serve?
ciao e grazie
Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...