PDA

Visualizza la versione completa : [C++] Verifica del formato di una stringa con MFC


giuseppe500
11-10-2008, 15:08
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.

giuseppe500
06-11-2008, 11:37
up

menphisx
06-11-2008, 12:05
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




bool is_string_numeric(const char* string){

do{

if(*string < '0' && *string > '9')
return false;

}while(*string++);

return true;

}



:ciauz:

Paulin
06-11-2008, 12:30
Scusa menphisx, ma is_string_numeric dov' definito?

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

shodan
06-11-2008, 12:41
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.

Paulin
06-11-2008, 14:11
Ho voluto testare la funzione, ma non ottengo il risultato atteso:


// 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?

oregon
06-11-2008, 14:20
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]

Paulin
06-11-2008, 14:36
Originariamente inviato da oregon
Io la modificherei cosi'



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:


if( (*string < '0') || (*string > '9') || (*string == ### )

...non conosco il valore del carattere "punto".

Stoicenko
06-11-2008, 15:11
*string != '.'

oregon
06-11-2008, 15:13
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:


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 ...

Loading