www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Opa114

Gepostet:
21.06.2008 17:08

Position von Char in String bestimmen  
Hey!

Da mir hier so toll geholfen wird, habe ich nochmal eine Frage. Die Anzahl von Chars in einem String kann ich abzählen, allerdings möchte ich die Position herausfinden, an der das Zeichen steht.

Beispiel: String: "a c c ea ag" (Die leeren Plätze sind Leerzeichen)

Ich möchte nun jeweils die Postionen herausfinden, an der das 'a' und das 'c' stehen. Das heißt das Ergebnis sollte so aussehen: [('a',1),('c',3),('c',6),('a',8),('a',10)], es kann auch so aussehen, das erst alle 'a' und dann alle 'c' aufgelistet werden, das ist egal ;-) Un der Rest soll ignoriert werden, d.h. 'e', 'g' , und die Leerzeichen sollen nicht beachtet werden.

Wäre super wenn ich wieder super Tipps und Hilfe bekommen könnte. Weil ich das überhaupt nicht hinkrieg, hab die ganzen letzten Tage davor gesessen und mir den Kopf darüber zerbrochen und ausprobiert wie ein Bekloppter, aber ohne Erfolg.

Matthias
Zum Seitenanfang    
 
Siracusa

Gepostet:
21.06.2008 21:25

   
Hallo,

das könnte man mit der zip-Funktion lösen. zip bekommt zwei Listen und bildet daraus eine neue Liste von Paaren, wobei zu einem Paar immer die beiden Elemene gehören, die in den Listen an gleicher Stelle stehen. Wenn du zip also mit deinem String und einer Liste von natürlichen Zahlen von 1 angefangen aufruftst, bekommst du genau die Position eines Zeichen mit dem Zeichen zusammen:
zip "ab cd ef" [1..]
[('a',1),('b',2),(' ',3),('c',4),('d',5),(' ',6),('e',7),('f',8)]
Die Resultatliste ist immer nur so lang wie die kürzeste Eingabeliste, weshalb du als Eingabe auch eine unendliche Liste verwenden kannst.

Da alle Zeichen gezippt werden, also auch die Leerzeichen, müßtest du noch eine Funktion dahinterschalten, die alle Paare mit Leerzeichen wegwirft. Dazu kannst du die Funktion filter verwenden, die eine Prädikatfunktion p und eine Liste übergeben bekommt und nur die Paare wegwirft, die p nicht erfüllten. Die Prädikatfunktion prüft dann einfach, ob ein Paar vom Typ (Char, Int) an der ersten Position kein Leerzeichen enthält.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Opa114

Gepostet:
21.06.2008 23:34

   
Danke Siracusa ;-)

Auf die Idee mit zip, da hätte ich auch drauf kommen können, aber so ist das, wenn man nicht oft mit Haskell programmiert. Danke für den Anstoss, nun ist es kein Problem mehr - nur ein paar Kleinigkeiten ;-) Danke!!
Zum Seitenanfang