AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit einem "leeren" String

Ein Thema von diavy · begonnen am 2. Mai 2012 · letzter Beitrag vom 4. Mai 2012
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

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

AW: Problem mit einem "leeren" String

  Alt 2. Mai 2012, 18:15
Unter neueren Delphis geht auch eine for-in-Schleife.
Delphi-Quellcode:
function countthenumbers(const a:string):integer;
var
  c: char;
begin
  Result := 0;
  for c in a do
    if c in ['0'..'9'] then
      inc(Result);
end;
Wobei der Compiler da ggf. auch eine Warnung ausgibt, je nach Version.
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
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#2

AW: Problem mit einem "leeren" String

  Alt 2. Mai 2012, 20:49
Zu erst einmal vielen Dank für eure Antworten!

Also die Methode mit
Code:
while (a<>'') and (a[i]<>'')
hat leider nicht geklappt.

Zitat:
Code:
function countthenumbers(const a:string):integer;
- wozu dient hier das const? Ist es nötig/hilfreich?

Zitat:
Code:
function countthenumbers(const a:string):integer;
var
  c: char;
begin
  Result := 0;
  for c in a do
    if c in ['0'..'9'] then
      inc(Result);
end;
Dies Methode mit c verstehe ich nicht ganz. Woher weiß das Programm wo bzw was c ist? Man definiert ja bloß die art der Variable (char). Dass dieser in einem String liegen kann ist logisch, es ist mir jedoch unbekannt woher das Programm auf diese Weise wissen soll wo es die Kondition kontrollieren soll.

Zitat:
abruch der schleife
- Wie? Ich habe dies gegoogelt und den Befehl "break" gefunden. Wenn ich ihn jedoch an jener Stelle verwende lautet die Fehlermeldung: "[Error] ex53.dpr(17): BREAK or CONTINUE outside of loop"

Vielen Dank für den Tip mit:
Code:
if a[i] in ['0','1','2','3','4','5','6','7','8','9'] then
Ich hab mir schon gedacht dass das doch irgendwie kürzer gehen MUSS.

Die Funktion length soll ich atm noch vermeiden wurde mir gesagt. Trotzdem danke!

Zitat:
Da ein Char immer ein Zeichen ist, kann es nicht "keine Zeichen" sein.
- Aber demnach wäre meine Schleife doch eine Endlos-Schleife?

Liebe Grüße und nochmal Danke!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.590 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit einem "leeren" String

  Alt 2. Mai 2012, 21:02
Zitat:
hat leider nicht geklappt.
Wobei das nicht wirklich eine Fehlerbeschreibung ist.
Wie lautet denn der Felher? (PS: man kann unten in den Meldungen und auch bei Messageboxen das Strg+C benutzen)


Das for-in geht intern alle Felder des Arrays oder einer Liste durch (alles was einen Enumerator implementiert hat)
und schreibt jeweils das aktuelle Feld in die Schleifenvariable.

Delphi-Quellcode:
var
  s: string;
  c: char;
  i: Integer;
begin

  for c in s do begin

    if c ... then
  end;

  for i := 1 to Length(s) do begin
    c := s[i];

    if c ... then
  end;
Das Const ist für eine Codeoptimierung, da man so den Parameter als konstant deklariert und somit Delphi keine Kopie anlegen muß.
Praktisch das Gegenteil von einem Var-Parameter, welcher als veränderlich definiert wird und wo man auch noch sagt, daß die beim Aufruf an diesen Parameter übergebene Variable verändert wird.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#4

AW: Problem mit einem "leeren" String

  Alt 4. Mai 2012, 20:53
Also ich hab's mal mit der for .. in-Schleife probiert und das hat nicht hingehauen.

Code:
program ex53;
{$APPTYPE CONSOLE}

uses
SysUtils;

var
a:string;

function countthenumbers(a:string):integer;
var
x:integer;
c:char;
begin
x:=0;
for c in a do
if c in ['0','1','2','3','4','5','6','7','8','9'] then x:=x+1;
result:=x;
end;

begin
{ TODO -oUser -cConsole Main : Insert code here }
writeln('Please enter a string:');
readln(a);
writeln('The amount of numbers in your string is:',countthenumbers(a));
readln;
end.
--> [Error] ex53.dpr(16): Operator not applicable to this operand type
--> [Error] ex53.dpr(17): Incompatible types: 'Boolean' and 'procedure, untyped pointer or untyped parameter'
--> [Error] ex53.dpr(19): Expression expected but 'END' found
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.590 Beiträge
 
Delphi 12 Athens
 
#5

AW: Problem mit einem "leeren" String

  Alt 4. Mai 2012, 21:49
For-In gibt es erst ab Delphi 2006 / Turbo Delphi.



PS:
Es gibt auch einen [delphi]-Tag, für die Codes.
Und 'ne halbwegs ordentliche Codeformatierung macht das alles bestimmt lesbarer.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#6

AW: Problem mit einem "leeren" String

  Alt 4. Mai 2012, 21:52
For-In gibt es erst ab Delphi 2006 / Turbo Delphi.
Oder auch im Lazarus, jedenfalls kann ich seinen Code damit kompilieren (im Gegensatz zu Delphi 5).

Zitat:
Und 'ne halbwegs ordentliche Codeformatierung macht das alles bestimmt lesbarer.
Dem kann - oder besser gesagt muss - ich mich anschließen.

MfG Dalai
  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 08:49 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-2025 by Thomas Breitkreuz