Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String auf mathematische zeichen durchsuchen. (https://www.delphipraxis.net/99260-string-auf-mathematische-zeichen-durchsuchen.html)

Chaosente 9. Sep 2007 16:18


String auf mathematische zeichen durchsuchen.
 
Also ich hab zwei funktionen geschrieben, die überprüfen sollen ob ein string nur mathematisches zeichen enthält also 0,1,2,3,4,5,6,7,8,9,+,-,*,/,(,)

nun gibt mir mein test aber immer false zurück obwohl es auf jeden fall in der zeichenmenge liegt. da muss also irgendwo ein logischer fehler sein denk ich mal. ich finde ihn nur leider nicht.

Hier mal der quelltext:
Delphi-Quellcode:
function IsInMathArray(s:char): boolean;
var
  i:integer;
  math_strings: array[0..15] of char;
begin
  math_strings[0]:='0';
  math_strings[1]:='1';
  math_strings[2]:='2';
  math_strings[3]:='3';
  math_strings[4]:='4';
  math_strings[5]:='5';
  math_strings[6]:='6';
  math_strings[7]:='7';
  math_strings[8]:='8';
  math_strings[9]:='9';
  math_strings[10]:='+';
  math_strings[11]:='-';
  math_strings[12]:='*';
  math_strings[13]:='/';
  math_strings[14]:='(';
  math_strings[15]:=')';

  for i:=0 to high(math_strings) do
    begin
      if s = math_strings[i]
        then result:=true
        else result:=false;
    end;
end;

function CheckMathStr(s:string): boolean;
var
  i:integer;
  not_math:integer;
begin
  not_math:=0;
  for i:=0 to length(s) do
    begin
      if IsInMathArray(s[i]) = false
        then not_math:=not_math+1;
    end;
  if not_math > 0
    then result:=false
    else result:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if checkmathstr(edit1.Text) = true
  then ShowMessage('math string')
  else ShowMessage('No Math string');
end;

Apollonius 9. Sep 2007 16:22

Re: String auf mathematische zeichen durchsuchen.
 
IsInMathArray ist schon falsch. Selbst wenn dein Char mit einem des Arrays übereinstimmt, wird beim nächsten Schleifendurchlauf result wieder auf false gesetzt. Da gehört einfach ein break rein.

Mit Mengen könntest du das deutlich einfacher lösen, da gibt es den in-Operator.

Chaosente 9. Sep 2007 16:25

Re: String auf mathematische zeichen durchsuchen.
 
Ja die mengen sind mirauch schon über den weg gelaufen, aber kann ich da zeichen wie + und - in ein set hinenpacken? sind das ordinale typen?

inherited 9. Sep 2007 16:28

Re: String auf mathematische zeichen durchsuchen.
 
Klar geht das!
Delphi-Quellcode:
function Dopefish(myChar: Char): Boolean;
begin
  result:=myChar in ['0'..'9','+','-','*','/'];
end;

Chaosente 9. Sep 2007 16:33

Re: String auf mathematische zeichen durchsuchen.
 
Cool danke, funtzt wunderbar... so gehts wirklich sehr viel einfacher...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz