Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Im Text nach Zeichen suchen und die dann zählen - aber wie? (https://www.delphipraxis.net/72379-im-text-nach-zeichen-suchen-und-die-dann-zaehlen-aber-wie.html)

plam 29. Jun 2006 12:15


Im Text nach Zeichen suchen und die dann zählen - aber wie?
 
Hallo erstmal, ihr lieben. Aaalso. Ich soll in Info 'nen Vortrag über besagtes Thema halten, hab aber keinen Plan von garnichts. Ich verlang jetzt nicht, dass ihr mir den Vortrag ausarbeitet, dass kann ich schon allein, haha, aber ich brauch einfach nurnmal fix jemanden, der mich mal in die richtige Richtung weist.

Ich bin jetzt inzwischen beim Knuth-Morris-Pratt-Algorithmus und auch beim Boyer-Moore-Algorithmus angekommen, allerdings suchen die ja nach Wörtern und niucht nach einzelnen Zeichen und mein Lehrer will aber, dass ich irgendwie nur rauskrieg, wieviele as oder bs oder cs oder was auch immer in einem Text sind. Ich hab ja die Vermutung, dass das mit den genannten Algotithmen trotzdem geht, aber dann kommt mir das a) ziemlich sinnlos vor (dann hab ja 'a' als Pattern und ratter das durch und dann hat sich's oder wie oder was) und b) steh ich immernoch vor dem Problem mit dem Zählen.

Wir hatten das so noch nicht in Info. Wir sortieren immer nur.

Macht mich glücklich und helft mir! :warn: (Hüstel. Nein ernsthaft, ich muss den Vortrag morgen halten und fang mal wieder urst zeitig an. Vielleicht lass ich morgen meine Üebrredungskünste und meinen weiblichen Charme spielen und überzeug den Lehrer davon, mir noch 'ne Woche Galgenfrist zu geben. Aber so ganz ohne irgendeine Vorbereitung will ich da nicht aufkreuzen. Ihr seid also praktisch meine letzte Hoffnung, oder so.)

SirThornberry 29. Jun 2006 12:23

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
du brauchst einfach nur alle zeichen einzeln durchgehen.
Wenn du insgesamt also 500 zeischen hast musst du alle 500 zeischen nacheinander prüfen.
Also einfach eine Schleife nehmen.
Dann musst du bei jedem Zeischen überprüfen:
Ist es ein "A" dann vermerken das man ein a gefunden hat, beim nächsten a vermerken das man 2 "A" gefunden hat etc.

Letzter Tipp wäre noch die Suche, auch andere hatten schon solche Aufgaben.

plam 29. Jun 2006 12:38

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Danke erstmal, Suche hab ich schon ausprobiert, da ist nicht so richtig das dabei was ich such. : D Höchstens vielleicht das hier, aber das versteh ich nichtwirklich. (Wie gesagt, ich bin 'ne Null in sowas.)

Und wir erkläre ich denen das dann am besten? Ich soll ja mindestens fünf Minuten reden (Kurzvortrag halt).

Gibt's da nicht irgend 'nen Algorithmus für? :roteyes: Sonst gibt's doch auch immer für alles Algorithmen. XD (Ja ich weiß, an sich sind das alles Algorithmen. Ich mein nur halt Solche Algorithmen, die nach irgendwelchen brühmten Damen und Herren nenannt sind und die einem im I-net lang und breit erklärt werden können.)

Der Herr L. will das glaub ich so, dass ich irgend 'nen Satz an die Tafel schreib und das dann am Beispiel erklär oder so. Ich hätte ihn ja auch nochmal gefragt, aber der war heute weg. Ich kenn ja jemanden der Info studiert hat, den würd ich ja auch fragen, aber den seh ich erst Montag wieder.

Ich krieg Panik. Himmel. Nächstes mal fang ich eher an.

SirThornberry 29. Jun 2006 12:46

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Die Aufgabe ist so einfach (jetzt nichts gegen Leute die das anders sehen) das es Frevel wäre wenn jemand diesem Algorytmus seinen Namen aufdrücken würde.

Die solltest an das ganze so rangehen als ob du es nicht programmiertechnich machen müsstest sondern auf einem Blatt papier - da bekommst du es ja auch hinn die Buchstaben zu zählen.
Und da gehst du ja auch von vorn der reihe nach die buchstaben durch, und wenn ein gesuchter Buchstabe auftaucht zählst du dazu.

TheAn00bis 29. Jun 2006 12:47

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Für sowas gibts bestimmt keinen berühmten Algorithmus.

Überleg doch einfach, wie du es selber machen würdest. Ich vermute mal du würdest einfach jeden Buchstaben des Satzes durchgehen und überprüfen, ob es der gesuchte Buchstabe ist. Ist er es, so addierst du zu der bereits gefundenen Anzahl '1'.

Das ist so tivial, dass man da nicht viel zu sagen muss.


Implementiert sieht das dann so aus: Eine Schleife geht jeden Char des Strings der den Satz enthält durch und vergleicht an jeder Stelle mit dem gesuchten char. Und wenn es der gesuchte ist, dann erhöhst du eine Interger-Variable um 1. Das kannst du bestimmt umsetzen. :)

plam 29. Jun 2006 13:08

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Achso, also mach ich jetzt in Delphi einfach irgendwie zwei Edit-Felder und 'n Label oder so, tipp in das eine Editdings meinen Text und in das andere den gesuchten Buchstaben Buchstaben rein der dann meinetwegen als x bezeichnet wird und dann setz ich n (anzahl) auf 0 und jedesmal wenn ein Buchstabe dazukommt n+1. Ist klar. (Ich weiß ich stell mich blöd an, aber ich versteh's wirklich nicht. :oops: ) Aber wie genau such ich dann nach den Buchstaben in dem String? Haben die dann irgendwelche Nummern oder wie oder was? (Irgendwie muss der ja vorwärtskommen.)

Irks. Ich glaub ich brauch 'n Struktogram. Ich kann ja mal versuchen eins zu malen, aber... Ja.

@TheAn00bis
Ist mir 'n bisschen peinlich das zu fragen, aber kannst du mir das mit dem char Zeug mal bitte als Dings schreiben, also so wie's dann in 'nem Struktogramm aussehen würde?


Vom Prinzip her ist das doch bestimmt so if [hier vermutlich das mit dem char?] = x, then do n+1. Nich? Oder muss ich dann noch so'n Überbegriff für diese ganzen "n"s haben, also als Ausgabe dann, weil... Das muss ja irgendwie zusammengefasst werden, oder?

sakura 29. Jun 2006 13:11

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Zitat:

Zitat von plam
Vom Prinzip her ist das doch bestimmt so if [hier vermutlich das mit dem char?] = x, then do n+1. Nich? Oder muss ich dann noch so'n Überbegriff für diese ganzen "n"s haben, also als Ausgabe dann, weil... Das muss ja irgendwie zusammengefasst werden, oder?

Yepp. Z.B.:
Delphi-Quellcode:
...

for I := 1 to Length(EingabeString) do
  if (EingabeString[I] = 'a') or (EingabeString[I] = 'A') then
    Treffer = Treffer + 1;
...:cat:...

plam 29. Jun 2006 13:19

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Was ist "I" und was hat es mit der 1 auf sich? Ist das der Startwert oder hat das was mit ASCII zu tun? :oops:

TheAn00bis 29. Jun 2006 13:21

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Schau dir das mal an: http://dsdt.info/grundlagen/sprache/schleifen.php

Edit: Zusätzlich solltest du vll noch wissen, dass length() dir die Länge eines Strings zurückgibt (wieviele Zeichen er enthält) und, dass ein String quasi ein Array of Char ist, dass bei 1 beginnt.

sakura 29. Jun 2006 13:21

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Zitat:

Zitat von plam
Was ist "I" und was hat es mit der 1 auf sich? Ist das der Startwert oder hat das was mit ASCII zu tun? :oops:

I ist eine Integervariabel. Jeder String hat eine Länge X welche mit Length(EingabeString) ermittelt wird, also geht die Schleife von Zeichen 1 bis zum Stringende durch und vergleicht jedes Zeichen mit a und A. Bei Erfolg wird die Integervariable Treffer um eins erhöht.

...:cat:...

plam 29. Jun 2006 13:25

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
AAH. OOH. OK. Sehr schön. XD Danke. Ich versuch jetzt echt mal das Struktogram zu malen und dann scan ich das und dann wär ich euch sehr verbunden, wenn ich das nochmal angucken würdet. :D

Danke nochmal. Ihr seid echt meine Rettung. XD

Martin K 29. Jun 2006 13:31

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Dann will ich mal ein wenig erklären:

Zunächst mal hast Du den String, den Du in einer FOR-Schleife durchlaufen musst: vom ersten Buchstaben bis zum letzten.
In einem String haben die einzelnen Buchstaben "Chars" alle einen Index in dem String, Beispiel:
wenn s der String ist, bekommst Du mit s[1] den ersten Buchstabe und mit s[2] den zweiten Buchstaben.
Also bekommst Du mit s[i] (wenn i ein Integer-Wert, eine Zahl, ist) den Char (Buchstabe) an der Position i in Deinem String.
Mit Length(s) bekommst Du die Anzahl der Buchstaben in dem String, also die Länge des Strings.

Wir brauchen jetzt eine FOR-Schleife, die den String von Anfang bis Ende durchläuft und den Char mit dem gesuchten Char an der aktuellen Stelle (Position i) vergleicht.
Dein String ist jetzt nicht s sondern eben Edit1.Text, der gesuchte Char steht in Edit2.Text.

Delphi-Quellcode:
var i, j: Integer; //i als Variable für die Position im String (also für die FOR-Schleife)
                   //j zählt die Chars, also wie oft Edit2.Text in Edit1.Text vorkommt
begin
  j := 0; //zunächst kommt unser Buchstabe 0 Mal vor

  for i := 1 {Startwert von i: erster Buchstabe} to Length(Edit1.Text) {Endwert von i: letzer Buchstabe = Länge des Strings} do
 
    if Edit1.Text[i] {Buchstabe an der Position i} = Edit2.Text[1] {erste Buchstabe in Edit2.Text = unser gesuchter Char} then
      j := j + 1; //j wird um 1 erhöht
end;
//Edit:
Jetzt hab ich sowas schönen geschrieben und ihr ward doch schneller...
Wo bleibt der rote Kasten ???

plam 29. Jun 2006 14:10

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
@Martin K

:spin2: Das war sehr einleuchtend, DANKE DANKE DANKE! :-D




http://i64.photobucket.com/albums/h1...rplam/info.jpg
Ich hoff es ist halbwegs lesbar und nicht allzu falsch, ich hab ewig keine Struktogramme mehr gemalt. Verbessert mich bitte wenn was falsch is (auch von der Form her und so, weil sonst muss ich mir wieder was vom Lehrer anhören.). : D


Das Problem hab ich an sich hab ich jetzt kapiert und fühl mich auch im Stande, das morgen so zu erklären. XD (Ich glaub ich mach hier grad voll aus 'ner Mücke 'nen Elefanten, ahem.)

Klaus01 29. Jun 2006 14:23

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Hallo,

char[1] gibt es nicht, ein Zeichen ist nur ein Zeichen

Delphi-Quellcode:
var
  c: char;

  if string[i] = c then ...
Zum schönen Struktogramme malen -> bei Google mal nach winGesy suchen

Grüße
Klaus

plam 29. Jun 2006 14:40

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Also so?

http://i64.photobucket.com/albums/h1...lam/strgr2.jpg
Oder bei der Eingabe besser c: char?




(winGesy geht bei mir irgendwie nicht, irks.)

Klaus01 29. Jun 2006 14:43

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
wenn Du noch dabei schreibst das c Dein gesuchter Buchstabe ist.
Dann sieht es o.k. aus.

Grüße
Klaus

Martin K 29. Jun 2006 14:43

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Ja, genau einfach nur:

if String[i] = Char

Das mit dem [1] gibt es nur bei Strings, hatte das mit dem Edit2.Text[1] so gemacht, weil Edit2.Text ein String ist und Du ihn als Char zum Vergleichen umwandeln musst. Also der erste Buchstabe aus dem String Edit2.Text: -> Edit2.Text[1].
Das wiederum liefert einen Char zurück.
Ein Char hat immer die Länge 1, als praktisch ein String der nur ein Zeichen hat.

Hoffe ich habe mich verständlich ausgedrückt:
Einfach das [1] bei Char weglassen, da Du bei dem Char natürlich immer den ersten Buchstaben bekommst (Char hat ja nur einen Buchstaben insgesamt!).

//zum neuen Posting:
Ja, so.
Da Du Deinen String aber nicht extra deklariert hast (s: String) brauchst Du es bei dem Char auch nicht.
Entweder machst Du es einheitlich (so würde ich es machen), dann schreibst Du einfach s anstatt String und c anstatt Char,
oder Du schreibst überall nur den Variabeltyp, also String aber auch Char anstatt c.

plam 29. Jun 2006 14:51

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
OK, gut. : D Dann mach ich das mit dem char und dem string noch so. Aber ansonsten geht's so, ja?

(Meine Güte, ich bin so glücklich. :corky: Ihr wisst garnicht wie sehr ihr mir den Tag gerettet habt.)

Martin K 29. Jun 2006 14:55

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Zitat:

Zitat von plam
OK, gut. : D Dann mach ich das mit dem char und dem string noch so. Aber ansonsten geht's so, ja?

Ehrlich gesagt, ich hab keine Ahnung wie ein korrektes Struktogramm aussehen muss (war das einzigste was ich in meiner mündlichen Prüfung nicht wusste :oops: ), aber ich würde mir so eine deklaration irgendwo hin schreiben:

> s: eingegebener String
> c: gesuchter Char
> j: Anzahl gesuchter Char ("wie oft dieser in s vorkommt")
> i: Zählvariable

j := 0 usw.

Jo, sonst sieht es eigentlich ganz gut aus, würde ich mal tippen.
(Nur noch das "String" durch s ersetzen...)

DGL-luke 29. Jun 2006 15:45

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
jetzt kommt wieder mein berüchtigtes "Ich hab da mal was vorbereitet" :lol:

Naja, is schon länger her: http://www.delphipraxis.net/internal...ct.php?t=54673

Der Sourcecode wird dir da aber nicht viel helfen, das Buchstabenzählen sieht so aus:

Delphi-Quellcode:
//--------Rechenschleife---------//
for i := 1 to Len do
 begin
  if (i mod 1000) = 0 then application.ProcessMessages; //kann manrauslassen
  if getAsyncKeyState(VK_ESCAPE)<0 then break; // bei "ESC" wird abgebrochen
  c:=s[i]; //ähm... genau, c ist ein char, s ist der text, c wird also der ite buchstabe im text zugewiesen
  PBSum.Stepit; //PBSum ist die gesamtanzahl Buchstaben, die hier zu prüfzwecken inkrementiert wird
  bars[ord(c)].StepIt; //bars sind progressbars, die damit inkrementiert werden. man kann es genauso mit einem array of integer machen.
 end;

Klaus01 29. Jun 2006 17:20

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Liste der Anhänge anzeigen (Anzahl: 1)
habe Dir das Struktogramm mal als pdf angehängt.

Grüße
Klaus

-=IOI=- 11. Dez 2006 21:59

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
ich suche momentan nach einer möglichkeit wie ich die leerzeichen in einem string zählen kann.

die wohl einfachste variante, die ich auch hier im forum gefunden habe, ist, dass ich jedes zeichen des strings einzeln durchgehe und vergleiche.

leider funktioniert das bei mir nicht.

hier mal etwa code
Delphi-Quellcode:
p:= 0;
for j := 1 to length(param) do
begin
  if param[i] = ' ' then p := p + 1;
end;
p und j sind als integer deklariert, param als string.
es wird auch ohne probleme compiliert.
wenn mein prog, dann aber in die schleife geht bekomm ich eine fehlermeldung "Fehler bei Bereichsprüfung"
(nutze delphi 2005 personal)

ich weiß nicht mehr, was ich noch versuchen soll.

hoffe mir kann jemand von euch helfen

Martin K 11. Dez 2006 22:09

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
Als Zählvariable in der FOR-Schleife verwendet Du j.
Dann aber das hier:
Delphi-Quellcode:
if param[i] = ' ' {...}
Imho sollte das hier auch j sein.

-=IOI=- 11. Dez 2006 22:12

Re: Im Text nach Zeichen suchen und die dann zählen - aber w
 
:wall: also wirklich, wie blind muss man sein, um das zu übersehen. seit ner knappen stunde schlag ich mich jetzt schon damit rum und es ist sowas triviales.

ich dank dir


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