Jak sprawdzić czy tekst jest liczbą?

dział ogólny

Jak sprawdzić czy tekst jest liczbą?

Nowy postprzez Krzysiu555 » sobota, 15 listopada 2008, 14:12

Chodzi mi o to że gdy ktoś wprowadzi do Edita jakiś tekst to program sprawdza czy są to same liczby czy zawartość mieszana.
Napisałem coś takiego:
Kod: Zaznacz cały
bool czy_liczba;
String test = "test";
int i;
for (i=0;i<strlen(test.c_str());i++)
{
   if(isdigit(test[i]) == true)
   {
     czy_liczba = true;
     ShowMessage("true");
   }
   else
   {
     czy_liczba = false;
     ShowMessage("false");
     break;
   }
}

Ale po uruchomieniu funkcji z tym kodem program zacina się.
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
Podziękował : 2
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak sprawdzić czy tekst jest liczbą?

Nowy postprzez banita » sobota, 15 listopada 2008, 15:10

strlen(test.c_str()) po co to? poprostu test.size()
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak sprawdzić czy tekst jest liczbą?

Nowy postprzez Cyfrowy Baron » sobota, 15 listopada 2008, 17:23

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak sprawdzić czy tekst jest liczbą?

Nowy postprzez Krzysiu555 » sobota, 15 listopada 2008, 20:39

dzięki właśnie o to mi chodziło=]
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
Podziękował : 2
Otrzymał podziękowań: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron