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.
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.
up
*** EDIT: versione più performantecodice: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]; }
codice:bool is_string_numeric(const char* string){ do{ if(*string < '0' && *string > '9') return false; }while(*string++); return true; }
Scusa menphisx, ma is_string_numeric dov'é definito?
....ehm, pardon, avevo letto troppo in fretta.
Se ti interessa solo per windows, io userei le funzioni IsCharAlpha e IsCharAlphaNumeric.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.
Ho voluto testare la funzione, ma non ottengo il risultato atteso:
Cosa non funzona?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; }
Io la modificherei cosi'Originariamente inviato da Paulin
ma non ottengo il risultato atteso
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.
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.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; }
Fose bisognerebbe aggiungere:
...non conosco il valore del carattere "punto".codice:if( (*string < '0') || (*string > '9') || (*string == ### )
Il controllo, come si puo' vedere dal semplicissimo codice, e' fatto soltanto sulle cifre.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:
...non conosco il valore del carattere "punto".codice:if( (*string < '0') || (*string > '9') || (*string == ### )
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.