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 8 gości