[C] Problema strcmp()

di il
5 risposte

[C] Problema strcmp()

Salve, ho un problema\dubbio banale sulla strcmp().

Mi trovo in una situazione del genere:

printf("\nEffettua la scelta: \n");
	   scanf("%s",scelta);
if(strcmp(scelta,"Si")==0 || strcmp(scelta,"si")==0 || strcmp(scelta,"SI")==0 )
	   {
	    printf("Funziona!\n"); //printf utilizzata per prova
	   }
e vorrei evitare di scrivere l'if "così lungo", e cercare un modo per avere lo stesso risultato in modo più abbreviato. Consigli??

5 Risposte

  • Re: [C] Problema strcmp()

    Devi usare una sola volta la funzione

    stricmp
  • Re: [C] Problema strcmp()

    In che senso? io ho bisogno di 3 alternative:
    1) se l utente inserisce "Si"
    2) se l utente inserisce "si"
    3) se l utente inserisce "SI"

    l'or non posso usarlo...
  • Re: [C] Problema strcmp()

    In sostanza anziché usare la strcmp per tutti i casi ti conviene usare una funzione non case sensitive per confrontare 2 stringhe...
    Una possibile implementazione potrebbe essere questa:
    
    int mystrcmp(const char * pStr1, const char *pStr2)
    {
        char c1, c2;
        int  v;
    
        do {
            c1 = *pStr1++;
            c2 = *pStr2++;
            v = (unsigned int) tolower(c1) - (unsigned int) tolower(c2);
        } while ((v == 0) && (c1 != '\0') && (c2 != '\0') );
    
        return v;
    }
    
  • Re: [C] Problema strcmp()

    Ancora piu semplice trasformi scelta in lower e poi la confronti:
    
    char* strlow(char* s)
    {
        char* ms = s;
        while( ( *s = tolower(*s) ) ) ++s;
        return ms;
    }
    
    int main(void)
    {
    
        char scelta[80];
        printf("\nEffettua la scelta: \n");
        scanf("%s",scelta);
    
        if ( !strcmp(strlow(scelta), "si"))
            printf("Funziona!\n");
    
    
        return 0;
    }
    
  • Re: [C] Problema strcmp()

    Grazie mille sempre efficienti
Devi accedere o registrarti per scrivere nel forum
5 risposte