Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String auf Buchstaben testen (https://www.delphipraxis.net/74456-string-auf-buchstaben-testen.html)

TomDooley 3. Aug 2006 14:46


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:
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;
Gibt es eine effizienere Methode?

Danke

fwsp 3. Aug 2006 15:00

Re: String auf Buchstaben testen
 
hier wird ein ähnliches problem behandelt
http://www.delphipraxis.net/internal...ct.php?t=89155

marabu 3. Aug 2006 17:50

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:
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;
Freundliche Grüße vom marabu

Neutral General 3. Aug 2006 17:59

Re: String auf Buchstaben testen
 
[Unsinn entfernt]

TomDooley 4. Aug 2006 07:48

Re: String auf Buchstaben testen
 
Zitat:

Sobald das erste alphabetische Zeichen gefunden wird, meldet deine Funktion Erfolg.
Ich weiss und das soll es auch :oops:

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.

marabu 5. Aug 2006 17:10

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:
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;
Teuflisch schnell auch ohne Assembler - danke Klaus.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 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