1 2 | nächste Seite |
Gepostet: |
Kleinbuchstaben in Großbuchstaben konvertieren | ||||||||||
So, folgendes: Ich habe eine Funktion, die einen String kriegen soll. Sie soll die Kleinbuchstaben in Großbuchstaben konvertieren, den Rest aber so lassen wie er ist. Dass das mit map funktioniert ist mir auch klar, ich möchte es aber ganz gerne über Listenfunktionen machen. So weit bin ich schon: capitalize :: String -> String capitalize string = [(toUpper a) | a <- string, fromEnum 'a'>=97 && fromEnum 'a' <= 122] Das funktioniert insofern ganz gut, als da die Kleinbuchstaben tatsächlich konvertiert werden - beim Rest kommt aber eben nur Bockmist raus. Gibt es eine Möglichkeit, wie man mit Listenbeschreibungen verschiedene Fälle abhandeln kann? Grüße Viviane |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Bin ja auch noch kein Experte, aber ich würde jeden Buchstaben einzeln behandeln! Allerdings kannst du so nur die Dinge ausgeben und behandeln welche dem Guard entsprechen. capitalize :: [Char] -> [Char] capitalize (x:xs) = [(toUpper a) | a <- (x:xs), fromEnum a >= 97 && fromEnum a <= 122] Das was du möchtest, musst du meiner bescheidenden Meinung nach anders lösen! Grüße domjoe |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Funktioniert vielleicht dies?: capitalize :: [Char] -> [Char] capitalize (x:xs) = [(toUpper a) | a <- (x:xs), isAlpha a] |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Bei welchen Zeichen kommt bei Dir eigentlich "Bockmist" raus? Bei mir funktioniert deine Funktion! Fragezeichen, Unterstrich, Prozentzeichen, Ausrufezeichen, alles wird richtig angezeigt! | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Gib als eingabe mal "String" ein, dann weiß er nicht was er mit dem S am Anfang anstellen soll, denn das ist ja schon groß. Grüße Viviane |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Bei mir gibt er das komplette Wort in Großbuchstaben aus! Bei allen drei Varianten die wir jetzt haben! Im Grunde sind sie ja auch alle gleich! Ich benutze übrigens die Haskell Plattform 2010.2.0.0 | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Probier mal den: capitalize''' :: [Char] -> [Char] capitalize''' xs = [if isAlpha a && isLower a then toUpper a else a | a <- xs] |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Warte mal......hm an sich müsst ich jetzt meckern wart mal dann geh ich selbst nochmal drüber.....ich kann da ne if-then-else -Abfrage vorne reinbauen? Das wollte ich doch die ganze Zeit wissen, ich wusste nich wo ich die Fallunterscheidungen machen soll, danke! |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
So. Bin endlich mal dazu gekommen isAlpha und isLower kennt mein ghci nicht, hast Du die Dir selbst geschrieben? Habe es dann wie folgt probiert: capitalize''' :: [Char] -> [Char] capitalize''' xs = [if fromEnum 'a'>=97 && fromEnum 'a' <= 122 then toUpper a else a | a <- xs] Das funktioniert auch insoweit als das Programm läuft allerdings liefert capitalize''' "String" als Ausgabe "3TRING", offenbar kann kann er also mit dem Großbuchstaben nicht umgehen bzw. interpretiert die else-Anweisung falsch. Woran kann das liegen? Grüße Viviane edit: Gefunden was isAlpha usw. machen, verstehe nur jetzt nicht warum mein Interpreter das mit "not in scope" kommentiert der müsste das doch kennen? |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Um diese Methoden nutzen zu können, musst du das Modul Char importieren. Das machst du, indem du am Anfang deiner Datei in der ersten Zeile import Char schreibst! In deiner Methode würde ich auch die einfachen Anführungszeichen weglassen, du fragst nämlich meiner Meinung nach ob der Kleinbuchstabe a innerhalb des Ascii-Intervals liegt und nicht nach dem, was in der Variable a drin ist! Deine Abfrage ist somit immer wahr! Grüße domjoe |
|||||||||||
Zum Seitenanfang | |||||||||||
1 2 | nächste Seite |