![]() |
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; |
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. |
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?
|
Re: String auf mathematische zeichen durchsuchen.
Klar geht das!
Delphi-Quellcode:
function Dopefish(myChar: Char): Boolean;
begin result:=myChar in ['0'..'9','+','-','*','/']; end; |
Re: String auf mathematische zeichen durchsuchen.
Cool danke, funtzt wunderbar... so gehts wirklich sehr viel einfacher...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz