AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String und Char

Ein Thema von Kompon Ente · begonnen am 5. Jul 2005 · letzter Beitrag vom 5. Jul 2005
Antwort Antwort
Kompon Ente
(Gast)

n/a Beiträge
 
#1

String und Char

  Alt 5. Jul 2005, 10:38
Hi,

ich will abfragen, ob die 5 Vokale in einer TStringList vorhanden sind.

Wie mache ich das?

Hier mein Anfang:

Delphi-Quellcode:
  if CheckListe.Strings[i] in ['A','E','I','O','U'] then
  begin
    // ...
  end;
Kommt aber die Fehlermeldung, dass es inkompatible Typen sind!
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: String und Char

  Alt 5. Jul 2005, 10:41
Der in-Operator funktioniert nur mit Ordinalen Typen. Ein String ist das nicht.
Wenn du es nur mit chars machen willst, kannst du das Erste Element des Strings nehmen. Dafür muss aber gewährleistet sein, dass überhaupt ein Element enthalten ist
if CheckListe.Strings[i][1] in ['A','E','I','O','U'] then klappt, aber wie gesagt, unter der Bedingung, dass der String nicht Leer ist.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Kompon Ente
(Gast)

n/a Beiträge
 
#3
  Alt 5. Jul 2005, 10:43
Hallo,

ich möchte aber testen, ob schon alle Vokale erraten wurden und nicht nur einer davon.

Wenn alle Vokale erraten wurden, soll was passieren.

Verstehst?
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#4

Re: String und Char

  Alt 5. Jul 2005, 10:46
Habs jetzt mal Testweise mit nem einfachen String gemacht und nicht mit ner TStringList, aber das hier müsste auch für ne TStringList passen:
Delphi-Quellcode:
procedure test;
var i,v : Integer;
    c : Char;
    s : string;
    erraten : array[0..4] of Boolean;
begin
  s := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  v := 0; //Anzahl Vokale
  for i := 1 to length(s) do
    begin
      c := s[i];
      if c in ['A','E','I','O','U']
        then inc(v);
      if v = 5 then
        begin
          showMessage('Das waren alle Vokale!');
          abort;
        end;
    end;
end;
Vorteil: Aufgrund er Überprüfung mit length(s) passiert nichts, wenn der String leer ist. for i := 1, weil im String das erste Element 1 ist, anders als bei anderen Typen.

Edit:
Deinen letzten Post nicht gesehen. Daraufhin Code angepasst
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#5

Re: String und Char

  Alt 5. Jul 2005, 10:48
hi

Das ist doch aber nicht das was Kompon Ente haben will oder?
So wie ich das sehe wird dir nix anderes übrig bleiben als es mit 6 if Abfragen zu machen, mit Pos zb.
  Mit Zitat antworten Zitat
Kompon Ente
(Gast)

n/a Beiträge
 
#6
  Alt 5. Jul 2005, 10:50
Danke für Eure Ideen!

Hab's anders gelöst:

Hab 'ne globale Variable deklariert und bei jedem Kauf + 1 gezählt und wenn er bei 5 ist, sind alle Vokale gekauft.

Trotzdem danke!
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#7

Re: String und Char

  Alt 5. Jul 2005, 10:56
Zitat von LoL:
hi

Das ist doch aber nicht das was Kompon Ente haben will oder?
So wie ich das sehe wird dir nix anderes übrig bleiben als es mit 6 if Abfragen zu machen, mit Pos zb.
Jupp, hatte seinen Post bezüglich des Problem übersehen Deswegen mal ein edit.
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#8

Re: String und Char

  Alt 5. Jul 2005, 11:22
Zitat von Thanatos81:
Habs jetzt mal Testweise mit nem einfachen String gemacht und nicht mit ner TStringList, aber das hier müsste auch für ne TStringList passen:
Delphi-Quellcode:
procedure test;
var i,v : Integer;
    c : Char;
    s : string;
    erraten : array[0..4] of Boolean;
begin
    s := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    v := 0; //Anzahl Vokale
  for i := 1 to length(s) do
    begin
      c := s[i];
      if c in ['A','E','I','O','U']
        then inc(v);
      if v = 5 then
        begin
          showMessage('Das waren alle Vokale!');
          abort;
        end;
    end;
end;
Vorteil: Aufgrund er Überprüfung mit length(s) passiert nichts, wenn der String leer ist. for i := 1, weil im String das erste Element 1 ist, anders als bei anderen Typen.
Das Problem ist zwar schon gelöst, aber Dein Code wird auch sagen "Das waren alle Vokale!", wenn ich

s := 'AAAAAAAAAAAAAAAAAA'; tippe
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#9

Re: String und Char

  Alt 5. Jul 2005, 11:50
Zitat von Catbytes:
Das Problem ist zwar schon gelöst, aber Dein Code wird auch sagen "Das waren alle Vokale!", wenn ich

s := 'AAAAAAAAAAAAAAAAAA'; tippe
um das zu umgehen, musst du nur die if-bedingung anpassen:

Delphi-Quellcode:
      if c in ['A','E','I','O','U'] then
        begin
        inc(v);
        Remove(c, v); // <==
        end;
      if v = 5 then
        begin
          showMessage('Das waren alle Vokale!');
          abort;
        end;
edit: vergesst was ich da gerade geschrieben habe, man müsste natürlich eine variable des types set of char deklarieren, die zuerst alle vokale enthält und woraus dann die vokale entfehrnt werden...
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#10

Re: String und Char

  Alt 5. Jul 2005, 12:04
Zitat von Catbytes:
Das Problem ist zwar schon gelöst, aber Dein Code wird auch sagen "Das waren alle Vokale!", wenn ich

s := 'AAAAAAAAAAAAAAAAAA'; tippe
Autsch! Nimmt mal jemand das Brett von meinem Kopf, bitte?
Hatte es erst so:
Delphi-Quellcode:
procedure test;
var i : Integer;
    c : Char;
    s : string;
    erraten : array[0..4] of Boolean;
begin
  s := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  for i := 0 to 4
    do erraten[i] := false;
  for i := 1 to length(s) do
    begin
      c := uppercase(s)[i];
      case c of
        'A' : erraten[0] := true;
        'E' : erraten[1] := true;
        'I' : erraten[2] := true;
        'O' : erraten[3] := true;
        'U' : erraten[4] := true;
      end;
      if erraten[0] and erraten[1] and erraten[2] and erraten[3] and erraten[4] then
        begin
          showMessage('Das waren alle Vokale!');
          abort;
        end;
    end;
end;
Aber so hab ich wieder was dazu gelernt: remove
Außerdem hab ich mal ein uppercase um den string gemacht, da Groß-/Kleinschreibung ja wahrscheinlich irrelevant sein soll.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:56 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