CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Haskell] Modifier une String clavier

krid-select
krid-select
Niveau 12
25 octobre 2017 à 21:25:44

Salut,
Alors voilà j'ai un petit soucis je dois coder un programme qui prend une séquence au clavier de ce type :

£55484: £52345: £56898: . £45484: £54785: .

je dois séparer la chaine et ne récupérer que les nombres et les . en java j'obtien quelque chose du genre :

55484|52345|56898|.|45484|54785|.

je dois par la suite manipuler les nombres pour en faire des string en fonction de caracteres dans un tableau et renvoyer la string avec tous les nombres remplacés ainsi que les points au bon endroit par exemple:

jtkjektkejd.kejdkje.

Du coup j'ai commencé un programme dont le main va lire l'entrée au clavier et le mettre dans une variable x puis imprimer x passant par une fonction qui va faire toutes les modifications necessaires.

J'ai commencé par découper x au niveau des espaces :

cut :: String -> [String]
cut x = h
               where
			     h = splitOn " " x

ceci me renvoie donc un tableau avec la string sans les espaces. Pour mes tests j'ai voulu ensuite l'imprimer mais vu que ce n'est plus une String je ne peux pas le faire passer par la fonction putStr (et je n'ai pas encore trouvé comment le reconvertir en String)
Du coup je me suis dit que j'allais continuer en attendant et j'ai créé une autre fonction qui va parcourir le tableau et me renvoyer un tableau avec les manipulations sur les nombres :


change :: [String] -> [String]
change[] = []
change (x:xs) = if x=="."
                   then x: (recuperer xs) 
                   else convertir x

Donc je veux regarder si l'élément est un "." , si oui je le remet dans le tableau puis je passe au suivant et si l'élément qu'on observe est autre chose (un nombre donc) je l'envoie vers une autre fonction qui va s'occuper de le transformer en la suite de caractères appropriée.

Du coup cette derniere fonction ne fonctionne pas et me ramene une erreur, si j'essai de la faire avec des gardes elle me donne une erreur d'indentation et avec le if then else :

error:
    • Couldn't match type ‘Char’ with ‘[Char]’
      Expected type: [String]
        Actual type: String
    • In the expression: change x
      In the expression:
        if x == "." then x : (change xs) else convertir x
      In an equation for ‘change’:
          change (x : xs)
            = if x == "." then x : (change xs) else convertir x
   |
24 |                    else convertir x    |                         ^^^^^^^^^^^

Quelqu'un pourrait-il me réaiguiller sur la bonne voie s'il vous plait? (Je précise que j'ai déjà totalement finit le programme en Java mais je dois le rendre en Haskell du coup j'ai encore un peu de mal avec la maniere d'écrire le code)

merci d'avance et bonne journée

krid-select
krid-select
Niveau 12
26 octobre 2017 à 01:08:52

Bon voilà j'ai réussi alors je vais mettre le topic en résolu et mettre ma solution au cas où quelqu'un tomberait sur ce topic:

Alors pour transformer x qui est un [String] en String il suffit de faire concat x


change :: [String] -> [String]
change[] = []
change (x:xs) = if x=="."
                   then x : recuperer xs 
                   else convertir x : recuperer xs  

Et ci dessus mon bout de code corrigé

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment