Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C] switch con stringa

  1. #1

    [C] switch con stringa

    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

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Non credo si possa fare lo switch su stringhe, devi usare una cascata di if-then-else,


  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    17
    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

  4. #4
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    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

  5. #5
    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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;
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    versione riveduta e corretta:

    codice:
    #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;
    }
    nota...al posto di nomi[indice] potevi inserire il nome fra virgolette...esempio "Marco". L'importante per la strcmp è avere 2 puntatori costanti a carattere

  8. #8
    Originariamente inviato da Lucked
    versione riveduta e corretta:

    codice:
    #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;
    }
    nota...al posto di nomi[indice] potevi inserire il nome fra virgolette...esempio "Marco". L'importante per la strcmp è avere 2 puntatori costanti a carattere
    Perchè per confrontare le stringhe tramite la funzione strcmp() non utilizzi direttamente quella "iniziale" ma allochi un puntatore nel quale la riversi??

    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...

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Perchè secondo me se ci fossero già una decina di nomi da confrontare sarebbe meglio usare un ciclo for

  10. #10
    Originariamente inviato da Lucked
    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[] ??

    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...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.