Controllo su sitringa

di il
6 risposte

Controllo su sitringa

Ciao
Ho bisogno di fare un controllo su una stringa in questo modo:
All'interno della stringa ho 3 elementi separati da spazi. Ho quindi implementato un controllo con la strtok in modo da ottenere nel token i vari elementi della stringa. A questo punto io dovrei verificare se queste stringhe(i token) contengono valori numerici interi o se contengono caratteri che non sono numeri. Ho provato a fare dei cicli while su ciascun token e ho utilizzato la funzione isdigit(token)==0 vuol dire che non ho un numero, e quindi termino. il problema è che mi vede sempre dei numeri anche se passo in quella stringa dei caratteri. Sbaglio qualcosa? oppure cè un modo più semplice per fare questo controllo?
Grazie

6 Risposte

  • Re: Controllo su sitringa

    Sicuramente sbagli qualcosa se il risultato che ottieni é diverso da quello che ti aspettavi.
    Se vuoi un aiuto posta il codice.
  • Re: Controllo su sitringa

    int ret = read(simpleChildSocket, buffer, sizeof(buffer));
        char* stringa = buffer;
       if(strcmp(stringa, "QUIT\n")==0){
           write(simpleChildSocket, MESSAGE3, strlen(MESSAGE3));
           break;
       }
        token = strtok(buffer, " ");
        count = 0;
        int flag = 0;
        int i;
        while(token && flag == 0){
            i=0;
            count ++;
            if(count == 1)
                strcpy(operazione, token);
            else if(count == 2){
                op1 = atoi(token);
                while(token[i] != '\0' && flag == 0){
                   if(isdigit('a')==0)
                       flag = 1;
                   i++;
                }
            }
            else{
                op2 = atoi(token);
               while(token[i] != '\0' && flag == 0){
                   if(isdigit(token[i])==0)
                       flag = 1;
                   i++;
                }
            }
            token = strtok(NULL, " ");
        } 
    Questa è la parte principale del codice in cui prendo il buffer, cioè la stringa inviata dal client e la analizzo. I valori che passo nel buffer sono giusti, perchè se stampo i token mi da i valori corretti. Voglio dei numeri soltanto nei due ultimi token, quindi se mando la stringa "+ 2 4" questa mi deve lasciare il flag a 0. Se invio "+ a 2" questa mi dovrebbe modificare il flag a 1.
  • Re: Controllo su sitringa

    Dove vedi isdigit('a') l'avevo messo per fare una prova, ma ci dovrebbe essere come nel ciclo sotto isdigit(token)
  • Re: Controllo su sitringa

    Secondo me dovresti iniziare a semplificare il codice, scrivendo delle funzioni di base.
    Potresti iniziare a scrivere una funzione come questa
    int AreAllDigits(char *str)
    che ti ritorna 1 o 0 a seconda che la stringa contenga solo cifre oppure no.
    Questa funzione la provi a parte, anche in un altro programmino, passandole delle stringhe di prova, per verificarne il corretto funzionamento.
    Quando questa funzione è a posto la puoi richiamare da quel pezzo di codice e passare eventualmente ad altri problemi.
    Se, invece, sviluppi tutto in un'unica mega funzione difficilmente ne verrai fuori.
  • Re: Controllo su sitringa

    Ho provato a fare una funzione a parte ma il problema è sempre lo stesso. Quello che non so se è giusto è utilizzare il "isdigit" su un char. Mi spiego meglio: il mio token è un char*. Ho visto esempi in cui isdigit è utilizzato su argomenti interi, altri su caratteri. Ora non riesco a capire perchè se il mio token è uguale a 2 la funzione isdigit(token[0]), cioè il carattere 2, non lo vede come un digit
  • Re: Controllo su sitringa

    Ok ho risolto. Siccome la mia stringa finisce con \n, l'ultimo token andava a controllare anche lo \n che ovviamente non è un digit. Ho tolto quel controllo e funziona. Grazie
Devi accedere o registrarti per scrivere nel forum
6 risposte