![]() |
Fehler: Inkompatible Typen - 'Char' und 'String'?
Hallo,
habe gerade ein Problem und irgendwie ein Brett vorm Kopf - finde keine Lösung:
Delphi-Quellcode:
Da spuckt Delphi doch glatt die Fehlermeldung aus:
function TForm1.wert(zeichenkette : string) : Integer;
var i, zaehler : Integer; begin for i := 1 to Length(zeichenkette) do begin case zeichenkette[i] of 'A..Z' : zaehler := zaehler + 1; 'a..z' : zaehler := zaehler + 1; '0..9' : zaehler := zaehler + 2; end; end; result := zaehler; end; Zitat:
Danke! |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
'A..Z' ist ein String. 'A'..'Z' wäre ein Unterbereich von Char.
|
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Danke!
|
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Hallo
Noch ein kleiner tip, verwende wenn möglich "const" bei Zeichenketten bei der Parameterübergabe von Funktionen. Das spart eine kopie des strings auf dem Stack ein ... (besser für performance und speicherverbrauch). Desweiteren hast du deine Variable "Zaehler" nicht initialisiert, aber besser noch verwende gleich "result" anstelle "zaehler" ... Vorschlag ...
Delphi-Quellcode:
function TForm1.wert(const zeichenkette : string) : Integer;
var i : Integer; begin result := 0; for i := 1 to Length(zeichenkette) do begin case zeichenkette[i] of 'A'..'Z' : result := result + 1; 'a'..'z' : result := result + 1; '0'..'9' : result := result + 2; end; end; end; |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Man kann's auch so schreiben
Delphi-Quellcode:
Gerd
var
i : Integer; begin result := 0; for i := 1 to Length(zeichenkette) do if zeichenkette[i] in ['A'..'Z','a'..'z','0'..'9'] then result := result + 1; end; |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Stimmt nicht ganz, bei Ziffern soll um 2 erhöht werden ;)
|
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
|
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
Wenn ich mich recht erinnere, dann können Delphi-Sets nur 256 Elemente abbilden. Man müsste dann wieder eine case-Abfrage daraus machen. |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
Gerd |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
Ein 'SET' (Menge) wird intern als 32 Byte langer Bitvektor abgebildet, das entspricht einem 'Packed Array [0..255] Of Boolean'. Daraus folgt nun, das die Elemente einer Menge nur aus einem ordinalen Typ bestehen kann, der 1. maximal 256 verschiedene Werte annehmen kann und 2. dessen höchster Ordinalwert (also Ord(High(TType))) kleiner als 256 sein muss. Ein "Char" ist somit der größte Datentyp, bei dem man mit Mengen arbeiten kann ("Byte" ist äquivalent) Es kann sein, das Delphi 2009 dies für 'Set Of Char'-Ausdrücke anders implementiert. |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
|
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
Delphi-Quellcode:
und folgenden Hinweis bekommen:
var
i : Integer; begin result := 0; for i := 1 to Length(zeichenkette) do if zeichenkette[i] in ['A'..'Z','a'..'z','0'..'9'] then result := result + 1; end; [DCC Warning] Unit1.pas(34): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit. Damit dürfe schon einiges beantwortet sein. So lange im Set nur Zeichen bis #255 vorhanden sind, und das ist bei "altem" Sourcecode immer der Fall, gibt's erst mal keine Probleme. (Ausser den ganzen Warnings, die erscheinen. ) |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
Bei mir kommen die beispielsweise bei solchen Funktionen, welche ich oft verwende:
Delphi-Quellcode:
procedure TMainForm.EditFredKeyPress(Sender: TObject;
var Key: Char); begin If not(key in [#48..#57,#8]) then key := #0; end; |
Re: Fehler: Inkompatible Typen - 'Char' und 'String'?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 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 by Thomas Breitkreuz