Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    c stringa alpha o aplhanumerica

    qualcuno può aiutarmi a risolvere...ho creato questa funzione per controllare se la stringa è solo aplha o aplhanumerica non riesco capire quando parte il programma mi controlla solo il primo carattere non riesco fare il controllo sulla intera stringa perchè se metto un numero alla fine della stringa output mi da sempre è una stringa
    codice:
    int getStringLength(const char* str){
        int length = strlen(str);
        return length;
    }
    codice:
    int checkIfStringisAlfa(const char str[]){
        int lenStr = getStringLength(str);
        int i = 0;
        bool trueFalse = false;
        for(i = 0; i < lenStr; i++){
            if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){
                trueFalse = true;
                break;
            }else if((str[i] >= 'a' && str[i] <= 'z') && (str[i] >= '0' && str[i] <= '9') || (str[i] >= 48 && str[i] <= 57)){
                trueFalse = false;
                break;
            }
        }
    
    
        return trueFalse;
    }
    codice:
    int main()
    {
        printf("\t\tC programming charecters\n");
    
    
        char* stringC = "test23";
    
    
        if(checkIfStringisAlfa(stringC)){
            printf("\t\tYes string\n");
        }else if(checkIfStringisAlfa(stringC) == false){
            printf("\t\tAlphanumeric string\n");
        }
    
    
        return 0;
    }
    Ultima modifica di shivi_php; 11-07-2014 a 23:03
    shiviphpdevelopment

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Rivedi il codice della funzione.

    Se il primo carattere è alfabetico, metti la variabile a true e termini il ciclo con la break. E gli altri caratteri?

    Inoltre, anche se ininfluente, nel main non ha senso eseguire due if ... basta l'else ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    è errata la logica, cioè proprio l'algoritmo. In particolare questa parte:

    codice:
        bool trueFalse = false;
        for(i = 0; i < lenStr; i++){
            if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){
                trueFalse = true;
                break;
            }else if((str[i] >= '0' && str[i] <= '9') || (str[i] >= 48 && str[i] <= 57)){
                trueFalse = false;
                break;
            }
        }

    La variabile trueFalse la devi settare a true prima del ciclo for, quindi fai semplicemente questo:

    codice:
    for (...)
    {
        if((str[i] >= '0' && str[i] <= '9') || (str[i] >= 48 && str[i] <= 57))
        {
            trueFalse = false;
            break;
        }
    }
    La logica che sta dietro a tutto ciò è la seguente: consideri una stringa formata da soli caratteri fino a quando non riesci a dimostrare il contrario, cioè fino a quando non trovi un numero. Appena trovi un carattere che non sia una lettera, setti trueFalse a false ed esci dal ciclo.



    EDIT: in contemporanea con oregon. Comunque lascio anche questo messaggio.

  4. #4
    siiiii siiiii grazie mille ragazzi è da due giorni che facevo prove prove e non andava oggi con una piccola modifica va benissimo grazie mille ora funziona alla grande
    shiviphpdevelopment

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    L'importante è che tu abbia capito il perché​!

  6. #6
    quando controllo lettere lascio scorrere tutto la strina invece nei numeri con break esco fuori dal for
    shiviphpdevelopment

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Esatto: sono solo i numeri che attirano l'attenzione. Altrimenti, se non ci sono numeri, la stringa viene esaminata e il valore di trueFalse non viene modificato, rimanendo a true.

  8. #8
    si ho capito la logica ero troppo confuso invece il problema era piccolo grazie mille
    shiviphpdevelopment

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Scusa minomic, perché questa if è fatta da due parti ?

    if((str[i]>='0'&& str[i]<='9')||(str[i]>=48&& str[i]<=57))
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Scusa minomic, perché questa if è fatta da due parti ?

    if((str[i]>='0'&& str[i]<='9')||(str[i]>=48&& str[i]<=57))
    Effettivamente me lo sono chiesto anche io, dato che i caratteri ASCII compresi tra 48 e 57 sono proprio i numeri! Comunque, dato che non è un errore, ho evitato di sollevare la questione con shivi_php e ho lasciato come aveva scritto lui... Però in effetti la cosa è un po' strana e sicuramente il codice è poco leggibile.


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.