Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ MFC]stringhe numeriche

    Qual è un buon metodo in mfc per sapere se una stringa è numerica o se la stringa è di tipo testo(offero solo lettere e non numeri)?
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

  3. #3
    codice:
    bool is_string_numeric(const char* string){
    
       bool result[2] = {false, true};
       int isNumeric = 1;
    
       do{
    
          if(*string >= '0' && *string <= '0')
             isNumeric &= 1;
          else
             isNumeric &= 0;
    
       }while(*string++);
    
       return result[isNumeric];
    
    }
    *** EDIT: versione più performante

    codice:
    bool is_string_numeric(const char* string){
    
       do{
    
          if(*string < '0' && *string > '9')
             return false;
    
       }while(*string++);
    
       return true;
    
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Scusa menphisx, ma is_string_numeric dov'é definito?

    ....ehm, pardon, avevo letto troppo in fretta.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++ MFC]stringhe numeriche

    Originariamente inviato da giuseppe500
    Qual è un buon metodo in mfc per sapere se una stringa è numerica o se la stringa è di tipo testo(offero solo lettere e non numeri)?
    Grazie.
    Se ti interessa solo per windows, io userei le funzioni IsCharAlpha e IsCharAlphaNumeric.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Ho voluto testare la funzione, ma non ottengo il risultato atteso:

    codice:
    // Test.cpp
    #include <iostream>
    
    bool is_string_numeric(const char* string)
    {
       do{
    	if(*string < '0' && *string > '9')
    		return false;
    
       }while(*string++);
    
       return true;
    }
    
    int main(void)
    {
       char str[] = "123";
    
       if ( is_string_numeric(str) == true )
       {
    	std::cout << "String is numeric." << std::endl;
       }
       else
       {
    	std::cout << "String is not numeric." << std::endl;
       }
    
       system("PAUSE");
       return 0;
    }
    Cosa non funzona?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Paulin
    ma non ottengo il risultato atteso
    Io la modificherei cosi'

    code]
    bool is_string_numeric(const char* string)
    {
    while(*string)
    {
    if((*string < '0') || (*string > '9'))
    return false;

    string++;
    }

    return true;
    }
    [/code]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Originariamente inviato da oregon
    Io la modificherei cosi'

    codice:
    bool is_string_numeric(const char* string)
    {
       while(*string)
       {
    	if((*string < '0') || (*string > '9'))
    		return false;
    
    	string++;
       }
    
       return true;
    }
    In questo modo lavora correttamente, riconoscendo char str[] = "123"; come numerica e char str[] = "abc"; come non numerica. Se però definisco una stringa numerica di tipo floating: char str[] = "123.456"; la riconosce come non numerica.

    Fose bisognerebbe aggiungere:

    codice:
    	if( (*string < '0') || (*string > '9') || (*string == ### )
    ...non conosco il valore del carattere "punto".

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    codice:
    *string != '.'

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Paulin
    In questo modo lavora correttamente, riconoscendo char str[] = "123"; come numerica e char str[] = "abc"; come non numerica. Se però definisco una stringa numerica di tipo floating: char str[] = "123.456"; la riconosce come non numerica.

    Fose bisognerebbe aggiungere:

    codice:
    	if( (*string < '0') || (*string > '9') || (*string == ### )
    ...non conosco il valore del carattere "punto".
    Il controllo, come si puo' vedere dal semplicissimo codice, e' fatto soltanto sulle cifre.
    Quindi e' evidente che qualsiasi altro controllo deve essere fatto appositamente ...

    E questo vale per il + per il - per il . e per la ,

    Il codice del punto e'

    '.'

    (facile no?)

    Fai attenzione nel modificare il codice ... quello che hai scritto non va molto bene perche' cosi' sarebbe possibile avere piu' di un punto decimale ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.