AGB  ·  Datenschutz  ·  Impressum  







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

String buchstabenweise in array einlesen

Ein Thema von basti2011 · begonnen am 12. Jun 2011 · letzter Beitrag vom 14. Jun 2011
Antwort Antwort
Seite 1 von 3  1 23      
basti2011

Registriert seit: 1. Mai 2011
Ort: Linz
11 Beiträge
 
Delphi 7 Enterprise
 
#1

String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:07
Hallo,
Ich würde gerne in ein dyn. Array einen string einlesen und zwar buchstabenweise.
Anschließend soll ein buchstabe in ein edit feld eingegeben werden und eine procedure gibt aus wie oft dieser buchstabe in dem oben eingelesenen array vorkommt.

Momentan bin ich beim einlesen in das array soweit :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,laenge :integer;
    wort :string;
    BS_array: array of string;
begin
 wort := edit1.text;
 laenge := Length(wort);
 Setlength(BS_array,laenge);
 For i := 1 to (laenge-1) do
  begin
   BS_array[1] := wort; // ich nehme an in diesem Bereich brauch ich einen befehl der den string zerlegt und damit einzelne Stellen belegt
  end;

Danke im Vorraus !
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:12
Du kannst die einzelnen Zeichen einer Zeichenkette über den Index ansprechen. Zu beachten ist dabei, dass der erste Buchstabe den Index eins hat: wort[1] gibt dir das erste Zeichen zurück.

Dynamische Arrays sind immer null-basierend.

Warum machst du das Array so lang wie das Wort und nutzt dann nur das erste Element: BS_array[1] := wort;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
basti2011

Registriert seit: 1. Mai 2011
Ort: Linz
11 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:19
Ja es scheitert nur daran dass mir die Idee fehlt wie ich jeden einzelnen Buchstaben ( ich weiß ja vorher nicht wie viele es sind)
einzeln in das array schreibe.



Im selben Zug muss ja auch dann ein bestimmter Buchstabe gesucht werden und gleichzeitig soll mitgezählt werden wie oft er existiert.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:34
Delphi-Quellcode:
function StrToArray(Value: String): TArray<Char>;
// oder: function StrToArray(Value: String): array of Char;
var
  L : Integer;
  C : Char;
  i : Integer;
begin
  L := Length(Value);
  SetLength(Result, L);
  if (L > 0) then
  begin
    for i := 0 to L - 1 do
      Result[i] := Value[i + 1];
  end;
end
Eigentlich liefere ich nur sehr ungerne eine komplette Methode, da man dabei halt nichts lernt. Wichtig ist hier, wie Luckie schon gesagt hatte, dass Arrays (meist) 0-basierend sind, also der Zugriff via Index, und Strings 1-basierend.

Aber ich habe dies bzgl. auch noch eine Frage, daher die komplette Methode Gibt es hierfür eine schnellere Methode!?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:39
Diese Variante wird nicht klappen!

Berücksichtige immer, dass Neulinge nicht wirklich die neusten Delphi Versionen benutzen und dadurch auch die neuersten Sprachfeatures nicht benutzen können!
(Ne kleine Änderung würde es kompilierbar machen, aber das dann nur Seitens erfahreneren Programmierer )

Edit:
oder: function StrToArray(Value: String): array of Char;
Dieses array of Char; müsste zuvor als Typ deklariert werden...
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (12. Jun 2011 um 20:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:40
Hallo,

ich habe leider keine Ahnung von Arrays (noch nicht), könnte es mir aber so vorstellen:
Delphi-Quellcode:
 ...
For i := 0 to (laenge-1) do
   begin
    BS_array[i] := wort[i+1];
   end;
...
Edit: roter Kasten, war zu langsam
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
zeras
Online

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#7

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 20:41
Du musst dir irgendwo merken, wie oft ein Buchstabe vorgekommen ist. Dazu vielleicht ein Array definieren, welche sich die Anzahl merken kann. Dann ist noch zu klären, ob du Großbuchstaben anderst behandelst als Kleinbuchstaben.

Versuche es doch einmal so (nicht optimiert):

Delphi-Quellcode:
procedure TForm11.Button1Click(Sender: TObject);
var i,laenge :integer;
    wort :string;
    BS_array: array ['a'..'z'] of byte;
    c : char;

begin
 wort := 'hallo';
 laenge := Length(wort);

 for c:=low(BS_array) to high(BS_array) do BS_array[c]:=0;


 For i := 1 to (laenge) do begin
   c := wort[i];
   BS_array[wort[i]] := BS_array[wort[i]] +1;
  end;
end;
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
basti2011

Registriert seit: 1. Mai 2011
Ort: Linz
11 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 21:18
Also erstmal danke für die vielen Antworten,

Ich bin im ersten Jahr und benutze momentan Delphi 7.
Daher sind mir ziemlich viele Komponenten und funktionen die genannt wurden sehr unbekannt

Besonders mit den Begriffen - value, high , low - kann ich nicht wirklich was damit anfangen und es ist so dass ich momentan für einen Test lerne und dieses Beispiel zur Übung bekommen hab

Der genaue Aufgabenlaut wäre : Schreib ein Programm welches ein eingegebenes Wort buchstabenweise in ein dyn. Array einliest. Nach Eingabe eines Buchstabens soll ausgegeben werden wie oft dieser Buchstabe im eingegebenen Wort vorkommt.

Groß und klein Buchstaben ist vollkommen egal eigentlich es geht rein um die Funktionlität dessen was in der Angabe steht.

Also vielleicht ergibt sich noch ne "einfache" Lösungsmöglichkeit die im Grunde genommen nur ein dyn. Array, eine For - Schleife und eine Function für die Überprüfung behinhaltet , weil viel weiter sind wir mit dem Stoff nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 22:24
Delphi-Quellcode:
L := Length(String);
SetLength(Array, L);
for i := 1 to L do
  Array[i - 1] := String[i];
Strings beginnen mit dem Index 1, dynamische Arrays hingegen mit 0, daher muss im obigen Code von i 1 abgezogen werden. Zum Auswerten kannst Du ja dann ein statisches Array['A'..'Z']: of integer verwenden, mit 0 füllen und je Buchstaben bei Fund um 1 erhöhen. Das ist zwar immer noch case-sensitive, aber das bekommst Du schon hin, es gibt ja Wandlungsfunktionen
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 s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 22:52
Es geht auch noch schneller Zeitersparnis ist je nach Stringlänge sehr hoch:
Delphi-Quellcode:
function StrToArray(Value: String): TCharArray;
var
  L : Integer;
begin
  L := Length(Value);
  SetLength(Result, L);
  if (L > 0) then
    Move(PChar(Value)^, Result[0], L * SizeOf(Char));
end;
Hier mal ein kleiner Benchmark (QuadCore Q6600):
Code:
Rounds: 10000000

Length: 21
naive: 2428ms
optimized: 1128ms
Time Saved: 54%

Length: 168
naive: 9179ms
optimized: 1831ms
Time Saved: 80%
Eine CountDiverseChars-Methode kommt auch bald
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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:12 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