Forum: PC-Programmierung C#: Hilfe bei "Algorithmus"


von Ivo (Gast)


Lesenswert?

Hallo!

Ich habe eine String, indem die Buchstaben L,R,V,Z vorkommen.
Zu einem suche ich eine Möglichkeit um herauszufinden ob auch nur diese 
Buchstaben im String vorkommen zum anderen würde ich aber auch gerne 
aufeinanderfolgende gleiche Buchstaben zusammenfassen:
Aus "RLLLVVLRLLRR" soll dann "R3L2VLR2L2R" werden.
D.h. meine erste Frage, müsste dahin ergänzt werden, dass so ein String 
a la als "R3L2VLR2L2R" als "richtig" erkannt wird.

Mein Problem: Hab keine Ahnung, wie ich weder das eine, noch das andere 
löse..

Könnt ihr mir helfen?

Danke!

Gruß
Ivo

von Floh (Gast)


Lesenswert?

Ivo schrieb:
> Mein Problem: Hab keine Ahnung, wie ich weder das eine, noch das andere
> löse..

1.Bleistift und Papier schnappen.
2.Eine beliebige mögliche Zeichenfolge hinmalen.
3.Das Problem buchstabe für Buchstabe von Hand lösen.
  Dabei schauen, wie du es selbst machst.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Ein Algorithmus ist erst mal "nur" eine Verarbeitungsvorschrift. Ob die 
in Umgansgsprache, Klingonisch, Basic oder C aufgeschrieben ist, ist 
erst einmal egal.

versuche, das Problem erst mal in Umgangssprache zu lösen, z.B.

setze den Wert von "vorheriger_buchstabe" auf <NICHTS>
setze den Wert von "anzahl_vorheriger__gleicher_buchstaben" auf 0
solange der Eingbestring nicht beendet ist, mache:
{
  nimm den nächsten Buchstaben und speichere ihn irgendwo zwischen
  prüfe, ob der Buchstabe in [L,R,V,Z]
     falls ja: Mache irgendwas   /* zum Beispiel eine Hupe einschalten 
*/
     break
     falls nein:
       prüfe, ob der zwischengespeicherte Buchstabe identisch ist mit 
"vorheriger_buchstabe"
          falls ja: ....
          falls nein:  ....

....etc....

}


Und so machst du halt weiter, bis alles das formuliert ist, was du haben 
möchtest.

Danach übersetzt du das in die Programmiersprache deiner Wahl, und schon 
bist du fertig;-)


Übrigens:
Wenn du schon sowas machst, wäre  vielleicht anstelle

> Aus "RLLLVVLRLLRR" soll dann "R3L2VLR2L2R" werden.

diese Variante "zweckmäßiger": (für wen auch immer, der später diesen 
geänderten String weiter verarbeiten soll)

Aus "RLLLVVLRLLRR" soll dann "1R3L2V1L1R2L2R" werden.

(also auch die Einzel-Schritte mit einem Zahlenwert versehen)

Grund: "der Nutzende" des geänderten Strings kann dann einfacher den 
String verarbeiten, und braucht nicht erst noch zusätzlich den String 
wieder aufbereiten mit

"falls Folgendes Zeichen ein Buchstabe ist, und vorheriges Zeichen auch 
ein Buchstabe war, dann setze Zähler zu "1", ansonsten nimm den 
Zählerwert"

Das folgende System bekommt also die Information schon vorgekaut und 
braucht nicht mehr selber drüber nachzudenken, sondern kan direkt 
ausführen.

von stefan (Gast)


Lesenswert?

Geh ins Internet und schau dir einfach mal die String Klasse an. Dann 
wirst du merken, dass man deine Probleme ganz leicht lösen kann.
Da sollte was dabei sein, wenn ich mich nicht irre.
http://msdn.microsoft.com/de-de/library/system.string%28v=vs.80%29.aspx

von U.R. Schmitt (Gast)


Lesenswert?

Klingt irgendwie nach Hausaufgaben.
Schau dir mal in Wikipedia den RLE (Run length encoding) Algorithmus an. 
Der macht im Prinzip genau das.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

uiui, da fehlt doch glatt ein "nicht" in dieser Zeile:

  prüfe, ob der Buchstabe <NICHT> in [L,R,V,Z]

naja, Ivo hat seine Hausaufgaben oder seine Robotersteuerung bestimmt 
schon fertig ....

von R. Heihoff (Gast)


Angehängte Dateien:

Lesenswert?

Ich hatte grade ein bisschen Lust zu Programmieren... :)
Vielleicht hilft dir die angehängte Klasse ja ein wenig weiter!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.