AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler: Inkompatible Typen - 'Char' und 'String'?
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler: Inkompatible Typen - 'Char' und 'String'?

Ein Thema von mo_greene · begonnen am 19. Okt 2008 · letzter Beitrag vom 20. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
mo_greene

Registriert seit: 10. Dez 2006
Ort: Berlin
136 Beiträge
 
Turbo Delphi für Win32
 
#1

Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 19. Okt 2008, 21:00
Hallo,

habe gerade ein Problem und irgendwie ein Brett vorm Kopf - finde keine Lösung:

Delphi-Quellcode:
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;
Da spuckt Delphi doch glatt die Fehlermeldung aus:

Zitat:
[Pascal Fehler] uView.pas(68): E2010 Inkompatible Typen: 'Char' und 'string'
Woran liegts?

Danke!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 19. Okt 2008, 21:05
'A..Z' ist ein String. 'A'..'Z' wäre ein Unterbereich von Char.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mo_greene

Registriert seit: 10. Dez 2006
Ort: Berlin
136 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 19. Okt 2008, 21:05
Danke!
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 06:22
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;
Peter Schaible
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 09:29
Man kann's auch so schreiben

Delphi-Quellcode:
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;
Gerd
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 09:33
Stimmt nicht ganz, bei Ziffern soll um 2 erhöht werden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#7

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 09:42
Zitat von DeddyH:
Stimmt nicht ganz, bei Ziffern soll um 2 erhöht werden
Übersehen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 09:52
Zitat von bernau:
Man kann's auch so schreiben
Sorgt das nicht für Probleme mit Unicode-Strings (Delphi 2009)?
Wenn ich mich recht erinnere, dann können Delphi-Sets nur 256 Elemente abbilden. Man müsste dann wieder eine case-Abfrage daraus machen.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#9

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 09:56
Zitat von nicodex:
Zitat von bernau:
Man kann's auch so schreiben
Sorgt das nicht für Probleme mit Unicode-Strings (Delphi 2009)?
Wenn ich mich recht erinnere, dann können Delphi-Sets nur 256 Elemente abbilden. Man müsste dann wieder eine case-Abfrage daraus machen.
Das Set selber kann 256 verschiedene Elemente beinhalten. In diesem Fall sind es 26+26+10 = 62. Das sind weniger als 256.


Gerd
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Fehler: Inkompatible Typen - 'Char' und 'String'?

  Alt 20. Okt 2008, 10:14
Zitat von bernau:
Das Set selber kann 256 verschiedene Elemente beinhalten. In diesem Fall sind es 26+26+10 = 62. Das sind weniger als 256.
Das ist zwar richtig, für das 'SET' aber irrelevant. Bei einer Menge ist nicht die Anzahl der Elemente limitiert, sondern die höchste Ordnungszahl eines Elementes.

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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 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