AGB  ·  Datenschutz  ·  Impressum  







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

einzelne Zeichen eines Strings einlesen

Ein Thema von malibu85 · begonnen am 12. Mär 2008 · letzter Beitrag vom 13. Mär 2008
Antwort Antwort
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#1

einzelne Zeichen eines Strings einlesen

  Alt 12. Mär 2008, 19:05
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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: einzelne Zeichen eines Strings einlesen

  Alt 12. Mär 2008, 19:10
In einer Schleife kannst Du mit DeinString[Laufvariable] auf das aktuelle Zeichen im String zugreifen.
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
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#3

Re: einzelne Zeichen eines Strings einlesen

  Alt 12. Mär 2008, 19:11
alles klar danke!
  Mit Zitat antworten Zitat
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#4

Re: einzelne Zeichen eines Strings einlesen

  Alt 12. Mär 2008, 21:43
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: einzelne Zeichen eines Strings einlesen

  Alt 12. Mär 2008, 21:53
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;
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
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: einzelne Zeichen eines Strings einlesen

  Alt 12. Mär 2008, 21:53
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...
Ralph
  Mit Zitat antworten Zitat
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#7

Re: einzelne Zeichen eines Strings einlesen

  Alt 13. Mär 2008, 08:58
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: einzelne Zeichen eines Strings einlesen

  Alt 13. Mär 2008, 09:02
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
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
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#9

Re: einzelne Zeichen eines Strings einlesen

  Alt 13. Mär 2008, 09:05
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 von malibu85:
Und was ist mit methode gemeint? Eine Komponenteneigenschaft wwie Form1.Button1click??
Methode ist eine Funktion/Prozedur einer Klasse.

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.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
malibu85

Registriert seit: 27. Dez 2007
45 Beiträge
 
#10

Re: einzelne Zeichen eines Strings einlesen

  Alt 13. Mär 2008, 09:10
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.
  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 09:39 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