Jeżeli funkcja ma sprawdzać tylko czy łańcuch znaków zawiera jakąś liczbę, czy też nie, to proponuję coś takiego prostego:
- Kod: Zaznacz cały
//---------------------------------------------------------------------------
BOOL TestDigit(AnsiString Text)
{
int digit[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int x = 0;
while(x < 10)
{
if(Text.Pos((String)digit[x]) > 0) return true;
x++;
}
return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if( TestDigit( Edit1->Text ) )
ShowMessage("Tekst zawiera cyfrÄ™");
else
ShowMessage("Tekst nie zawiera cyfr");
}
//---------------------------------------------------------------------------
Funkcja
TestDigit nie mierzy długości tekstu, tak jak Twoja funkcja, więc działa szybko, nawet przy bardzo długim tekście.
Pętla w funkcji zawsze liczy od 0 do 9.
Funkcja sprawdza tylko pierwsze wystąpienie jakiejś liczby, gdy napotka znak będący liczbą zwraca wartość
true w przeciwnym razie zwraca wartość
false.
Jeżeli łańcuch znaków zawiera więcej niż jedną liczbę, to dla funkcji nie ma znaczenia, gdyż przerywa swoje działanie po napotkaniu pierwszej cyfry.
Funkcja działa prawidłowo zarówno dla liczb całkowitych jak i dziesiętnych.