Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 29.04.05 18:51 
Hallo!
Melde mich schon wieder mit einer Frage:
Wie kann ich Worte in einem String zählen und das am meisten vorkommende einer Variablen zuweisen? Ich weiss, wie ich einzelne Worte extrahieren kann und ich kann auch die Anzahl der Worte ermitteln. Der String kann zB. enthalten:
ausblenden Delphi-Quelltext
1:
S := 'Montag Freitag Mittwoch Montag Donnerstag';					

Hier soll also "Montag" gefunden werden. Ich habe folgenden Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 Day := '';  //Stringvariable - soll das am meisten vorkommende Wort enthalten
 B := 0;
 B1 := 0;

 for I := 1 to WordCount(S) do  //Funktion WordCount ermittelt die Wortanzahl
 begin
  if B1 = B then Day := GetWord(S,I);  //Funktion GetWord extrahiert das I-te Wort aus dem String S
  B1 := B;
     //Funktion PosCount ermittelt die Anzahl der Vorkommen von GetWord(S,I)
  B := PosCount(GetWord(S,I), S, True);
 end;

Das funktioniert aber dann nicht, wenn zwei aufeinander folgende Worte ident sind. Wie mache ich das richtig?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 29.04.05 19:11 
Hallo,

am besten du gehst die Zeichenkette durch und speicherst die einzelnen Wörte in einer Liste mit folgenden Records:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
PWordCount = ^TWordCount;
TWordCount = record
  Word: String;
  Count: Integer;
end;
Nachher gehst du diese Liste einfach durch und merkst dir das am meisten vorkommende.

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 29.04.05 19:59 
user profile iconwulfskin hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
PWordCount = ^TWordCount;
TWordCount = record
  Word: String;
  Count: Integer;
end;

Danke, aber kannst du mir ein praktisches Beispiel geben, denn ehrlich gesagt fange ich damit wenig an... Danke!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 29.04.05 20:06 
Danke, hab's wieder mal selbst lösen können:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
 for I := 1 to WordCount(S) do
 begin
  B := PosCount(GetWord(S,I), S, True);
  if B > 1 then Day := GetWord(S,I);  //B ist > 1, wenn das Wort mehr als 1x vorkommt
 end;

Danke trotzdem!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!