![]() |
String auf Buchstaben testen
Gibt es eine fertige Funktion in Delphi mit der man einen String auf Buchstaben überprüfen kann?
Ich hab's bislang so gelöst:
Delphi-Quellcode:
Gibt es eine effizienere Methode?
function CheckLetter(Text : String) : boolean;
var i : integer; begin Result := false; for i:=1 to Length(Text) do begin if Text[i] in [chr($41)..chr($5A),chr($61)..chr($7A)] then begin Result := true; break; end; end; end; Danke |
Re: String auf Buchstaben testen
|
Re: String auf Buchstaben testen
Hang down your head Tom Dooley,
hast du deinen Code schon mal ausprobiert? Sobald das erste alphabetische Zeichen gefunden wird, meldet deine Funktion Erfolg. Du musst deine Logik anpassen. Hier noch eine Alternative, die von deinem Problem etwas abstahiert und dadurch andere Verwendungen ermöglicht:
Delphi-Quellcode:
Freundliche Grüße vom marabu
const
LCASE = 'abcdefghijklmnopqrstuvwxyzäöü'; UCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ'; ALPHA = LCASE + UCASE + 'ß'; function ContainsOnly(const s, chars: String): Boolean; var i : integer; begin i := 0; Result := s <> ''; // eine Frage der Definition ... while Result and (i < Length(s)) do begin Inc(i); Result := Pos(s[i], chars) > 0; end; end; procedure TDemoForm.DemoButtonClick(Sender: TObject); var s: String; begin s := ''; while InputQuery('Alpha-Test', 'String', s) do ShowMessage(IfThen(ContainsOnly(s, ALPHA), 'is alphabetic', 'is NOT alphabetic')); end; |
Re: String auf Buchstaben testen
[Unsinn entfernt]
|
Re: String auf Buchstaben testen
Zitat:
Ich habe jetzt auch verstanden dass der Titel falsch interpretiert werden kann. Die Aufgabe ist nämlich, dass der String KEINEN Buchstaben enthalten darf. (Hintergrund: ich bin an einem kleinen Übersetzungsprogramm. Nur Zahlen und Sonderzeichen müssen nicht übersetzt werden, jedoch wird Schalter123 zu Button123...) Danke trotzdem. Dein Code kann ja dennoch verwenden. |
Re: String auf Buchstaben testen
Hallo Leute,
AmateurProfi hat mir gegenüber in einer PN den Verdacht geäußert, dass eine Umstellung des Tests von string search auf set membership deutliche Laufzeitverbesserungen mit sich bringen könnte. Und Recht hat er damit. Der Compiler erzeugt so wesentlich effektiveren Code. Hier seine Funktion:
Delphi-Quellcode:
Teuflisch schnell auch ohne Assembler - danke Klaus.
type
TCharSet = Set of Char; const LCASE = ['a'..'z', 'ä', 'ö', 'ü']; UCASE = ['A'..'Z', 'A', 'Ö', 'Ü']; ALPHA = LCASE + UCASE + ['ß']; function ContainsOnly(const s: String; chars: TCharSet): Boolean; var i: Integer; begin i := Length(s); Result := s <> ''; // eine Frage der Definition ... while Result and (i > 0) do begin Result := s[i] in chars; Dec(i); end; end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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