Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi if Zeichen in Buchstaben then -> funktioniert nicht (https://www.delphipraxis.net/42482-if-zeichen-buchstaben-then-funktioniert-nicht.html)

gordon freeman 19. Mär 2005 14:40


if Zeichen in Buchstaben then -> funktioniert nicht
 
Hi Leute,

wieso funktioniert
Delphi-Quellcode:
var
Buchstaben : array of char;

(...)

function ZeicheninArray(Zeichen:Char);
begin
if Zeichen in Buchstaben then
(...)
end;
end.
Nicht? Muss die Datenmenge immer eine konstante Größe, doer sogar konstante Werte haben?

Und wenn das hier nicht geht, wie finde ich möglichst performant raus, ob ein Zeichen in einem Array drin ist? Im Moment gehe ich den gesamten Array durch und prüfe, ob das Zeichen enthalten ist, aber ich denke, das geht doch sicherlich schneller, oder?

tia, gordon

malo 19. Mär 2005 14:42

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
Was geht denn nicht? Meine Glaskugel braucht neue Batterien, aber vielleicht ist das der Grund:

Delphi-Quellcode:
function ZeicheninArray8Zeichen:Char);
Sollte so heißen:
Delphi-Quellcode:
function ZeichenInArray(Zeichen: Char);
:zwinker:

//edit: Du könntest auch jeden Index des "Buchstaben"-Array durchgehen und abfragen (per for-Schleife) ;)

JasonDX 19. Mär 2005 14:43

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
wenns nicht eine zu große einstellung ist:
statt array of char nen string verwenden. (Is am Ende ja (fast) das selbe...)
1. Einfacher zu handhaben (wenn du buchstaben zwischendrin hinzufügen willst
2. Isses dann mit Pos ziemlich schnell lösbar

@malo: ich glaube, der fehler entstand bloß beim tippen hier im forum :zwinker:

gordon freeman 19. Mär 2005 14:52

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
Okay, danke Leute, werd 'nen String nehmen. Der Fehler der mir ausgespuckt wurde war:
Zitat:

Zitat von Fehler:
Operator ist auf diesen Operandentyp nicht anwendbar!

oder so.... Aber mit 'nem String müsste es gehen!

jfheins 19. Mär 2005 15:03

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
Das kommt, weil in nur auf Mengen anwendbar ist, daher müsstest du deinen Array erst zu einer Menge machen, um das in benutzen zu können ...

gordon freeman 19. Mär 2005 16:21

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
Wie kann man denn einen Array in eine Menge umwandeln?

jfheins 19. Mär 2005 16:24

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
Umwandeln geht glaub och nicht, du müsstst ihn von anfang an als Menge deklarieren ... ;-)

Sharky 19. Mär 2005 16:46

Re: if Zeichen in Buchstaben then -> funktioniert nicht
 
Zitat:

Zitat von jfheins
Umwandeln geht glaub och nicht, du müsstst ihn von anfang an als Menge deklarieren ... ;-)

Delphi-Quellcode:
var
  buchstaben : Set of Char;

function ZeicheninSet(Zeichen:Char) : Boolean;
begin
  result := zeichen IN buchstaben;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  buchstaben := ['a'..'f','y','z']; // Set direkt setzen.
  if ZeichenInSet('a') then
  begin
    ShowMessage ('blubb');
  end;
end;

procedure TForm1.Button2Click(Sender: TObject); //Arry in SET schreiben.
var
  foo : Array Of Char;
  ndx : Integer;
begin
  buchstaben := []; // Set löschen
  SetLength(foo,4); // Array setzen
  foo[0] := 'a'; // Array füllen
  foo[1] := 'b';
  foo[2] := 'c';
  foo[3] := 'd';

  for ndx := Low (foo) to High(foo) do
  begin
    buchstaben := buchstaben + [foo[ndx]]; // Array in das Set schreiben
  end;

  if ZeichenInSet('x') then
  begin
    ShowMessage ('blubb');
  end;
end;


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