Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi einzelne Zeichen eines Strings einlesen (https://www.delphipraxis.net/110083-einzelne-zeichen-eines-strings-einlesen.html)

malibu85 12. Mär 2008 18:05


einzelne Zeichen eines Strings einlesen
 
Hallo, ich möchte gern die Quersumme einer Zahl berechnen. Dazu müßte ich wissen, wie man von einem String jedes einzelne Char ausließt. Kann mir jemand einen Tip geben, welche Möglichkeiten es da bei delphi gibt?
gruß malibu!

DeddyH 12. Mär 2008 18:10

Re: einzelne Zeichen eines Strings einlesen
 
In einer Schleife kannst Du mit
Delphi-Quellcode:
DeinString[Laufvariable]
auf das aktuelle Zeichen im String zugreifen.

malibu85 12. Mär 2008 18:11

Re: einzelne Zeichen eines Strings einlesen
 
alles klar danke!

malibu85 12. Mär 2008 20:43

Re: einzelne Zeichen eines Strings einlesen
 
habe den folgenden Algorithmus geschrieben. Er funktioniert um die Quersumme zu berechnen. Allerdings ruft er eine Hand voll Fehlermeldungen aus wobei das Ergebnis immer richtig ist.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  a:Array of integer;


implementation

{$R *.dfm}



                        procedure Quersumme;
                        var s:String;
                        c:char;
                        x1,x2,v:integer;

                        begin
                        with form1 do
                        begin

                        s:=Edit1.Text;
                        x1:=length(s);
                        label3.caption:=IntToStr(x1);
                        SetLength(a,x1);
                            for x2:=1 to x1 do
                            begin
                            a[x2]:=StrToInt(s[x2]);
                            end;
                            for x2:=0 to x1 do
                            begin
                            v:=v+a[x2];
                            end;

                            label4.Caption:=IntToStr(v);
                        end;
                        end;









procedure TForm1.Button1Click(Sender: TObject);
begin
Quersumme;
end;

end.
etwas verwundert bin ich über die erste For-Schleife
Delphi-Quellcode:
for x2:=1 to x1 do
                            begin
                            a[x2]:=StrToInt(s[x2]);
                            end;
hätte x am liebsten 0 zugewiesen und die Abbruchbedingung x-1.Mit der Begründung, dass das erste Array-element ja eigentlich a[0] ist aber wahrscheinlich ist das egal ob die Zahlenkette bei a[0] oder [1] anfängt. Im Grunde habe ich das so gemacht weil ich auf s[0} nicht zugreifen darf.

Meine Frage, gibt es ne Musterlösung die weniger problematisch ist?

DeddyH 12. Mär 2008 20:53

Re: einzelne Zeichen eines Strings einlesen
 
Versuch es mal damit (nur schnell dahingetippselt):
Delphi-Quellcode:
function Quersumme(const s: string): integer;
var i: integer;
begin
  Result := -1;
  if not TryStrToInt(s,Result) then
    exit;
  Result := 0;
  for i := 1 to Length(s) do
    Result := Result + StrToInt(s[i]);
end;

taaktaak 12. Mär 2008 20:53

Re: einzelne Zeichen eines Strings einlesen
 
Moin, Moin,
mal zwei Anmerkungen dazu: Schreibe "Quersumme" als Methode, dann ist das "with Form1 do begin" überflüssig. Die Indizierung eines String beginnt immer mit 1 !!!

// na und was DeddyH schreibt, ist natürlich eine kleine Optimierung (was auch darauf hinweist, dass die Berechnung von der Anzeige getrennt werden sollte - prinzipiell zumindest...

malibu85 13. Mär 2008 07:58

Re: einzelne Zeichen eines Strings einlesen
 
noch kurz zwei fragen, in der Funktion verwendet DeddyH die anweisung Result:=-1, was hat es damit auf sich? Und was ist mit methode gemeint? Eine Komponenteneigenschaft wwie Form1.Button1click?? Ist es möglich in Delphi auch OOP zu programmieren?

DeddyH 13. Mär 2008 08:02

Re: einzelne Zeichen eines Strings einlesen
 
Ich setze Result (= Rückgabewert einer Funktion) auf -1, damit man prüfen kann, ob der übergebene String auch in eine Zahl gewandelt werden kann. Ist das nicht der Fall, ist die Quersumme dann eben negativ. Ein Methode ist vereinfacht ausgedrückt eine Prozedur oder Funktion, die zu einer Klasse gehört. Somit erübrigt sich auch eine Antwort auf die Frage nach OOP in Delphi ;)

Tyrael Y. 13. Mär 2008 08:05

Re: einzelne Zeichen eines Strings einlesen
 
Zitat:

Zitat von malibu85
noch kurz zwei fragen, in der Funktion verwendet DeddyH die anweisung Result:=-1, was hat es damit auf sich?

Result ist das Rückgabeergebnis für die Funktion.
Hier wird als Standard -1 gesetzt, so daß man ausserhalb das Ergebnis auf -1 prüfen kann und weiss dass etwas schiefgelaufen ist.

Zitat:

Zitat von malibu85
Und was ist mit methode gemeint? Eine Komponenteneigenschaft wwie Form1.Button1click??

Methode ist eine Funktion/Prozedur einer Klasse.

Zitat:

Zitat von malibu85
Ist es möglich in Delphi auch OOP zu programmieren?

Natürlich und man sollte es unbedingt.
Aber wenn du nach Methode fragst, empfehle ich dir erst einmal mehr über OOP zu lesen.

malibu85 13. Mär 2008 08:10

Re: einzelne Zeichen eines Strings einlesen
 
Okay es sind also drei Anweisungen. Bin etwas durcheinander gekommen, da ich dachte, man trennt Steueranweisungen immer mit begin und end. Interessant zu wissen, das es zulässig ist. Im Prinzip habe ich Grundlagenerfahrung in OOP mit JAVA. Delphi finde ich etwas undurchlässig dies bezüglich. Wenig literatur etc. Methoden sind mir bekannt darum habe ich ja gefragt ob mit delphi oop möglich ist.


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