Partage
  • Partager sur Facebook
  • Partager sur Twitter

Print un string sans retour à la ligne

Sujet résolu
    11 novembre 2023 à 14:41:23

    Bonjour tout le monde,

    Mon problème est le suivant :

    Je voudrais afficher un string ressemblant à cela :

        /\     
    / \
    / /\ \
    / ____ \
    /_/ \_\

    Je voudrais coller deux "A" l'un à coté de l'autre mais je n'arrive pas à trouver de solution pour cela du au fait qu'il est le retour à la ligne 
    et que le vide à sa droite est aussi pris en compte.
    Auriez vous des pistes pour réaliser cela  ?

    En vous remerciant d'avance . 

    • Partager sur Facebook
    • Partager sur Twitter
      11 novembre 2023 à 18:34:26

      Bonsoir,

      Quel langage ?
      Peux-tu nous montrer ce que tu as essayé ? (du code).

      • Partager sur Facebook
      • Partager sur Twitter
        13 novembre 2023 à 16:48:16

        En attendant les infos demandées, l'idée serait de construire ta chaine avant de l'afficher.

        Sauf erreur de ma part, ta lettre fait 5 lignes en hauteur et 10 colonnes de largeur, donc l'idée serait de concaténer ces lignes en supprimant les retours à la ligne intermédiaire.

        Tes lignes doivent contenir les valeurs des 10 colonnes du caractère (ou de manière plus générique les n colonnes nécessaire à la lettre)

        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2023 à 9:33:24

          Bonjour,

          Pour le language c'est du Go.

          J'ai déjà essayé de faire cela:

          func ascii(car string) {
          var start = map[string]int{"a": 299, "b": 308, "c": 317, "d": 326}
          var end = map[string]int{"a": 305, "b": 314, "c": 323, "d": 332}
          filename := "standard.txt"
          startLine := start[car]
          endLine := end[car]
          filename = "standard.txt"
          file, err := os.Open(filename)
          if err != nil {
          fmt.Println("error1")
          return
          }
          defer file.Close()

          scanner := bufio.NewScanner(file)
          currentLine := 0

          for scanner.Scan() {
          //var a string
          currentLine++
          if currentLine >= startLine && currentLine <= endLine {
          fmt.Println(scanner.Text())
          }
          if string(currentLine) == "\n" {
          break
          }
          }

          if err := scanner.Err(); err != nil {
          fmt.Println("error3")
          return
          }
          return
          }

          Le problème est que la map prends en compte les \n et aligne les termes verticalement, si je les enlèves il m'affiche tout sur une ligne. 

          J'ai trouvé une méthode avec un [][]string mais je ne sais pas les manipuler et pourquoi faire comme les autres quand on peut faire plus compliqué. L'idée d'une []string dans une map est intéressante mais relativement compliquée

          Et pour rendre la chose plus amusante, tout les caractères ne font pas la même taille :)

          • Partager sur Facebook
          • Partager sur Twitter
            15 novembre 2023 à 13:13:53

            A quel moment se fait la traduction de "a" en ta forme A sur plusieurs lignes ? 

            Que contient ton fichier standard.txt (je dirais qu'il contient les lettres sur plusieurs lignes)

            A quoi correspond le nombre associé aux lettres dans tes map ?

            A quel moment tu parcours la chaine passée à ta fonction ascii?

            Est-ce que tu arrives à afficher une seule lettre ?

            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2023 à 13:40:12

              la traduction se fait avec le current line et la lecture du scan entre les lignes désigner des deux map, affichant de la ligne startline à endline quand j'appel la clé en question. 

              Tout à fait, il contient toute les lettres, nombre et signes ascii dans le meme format que celui montrer en début.

              Le nombre correspond au ligne de départ, pour le startline et la fin pour l'autre d'un meme caractère désigner comme clé.

              la chaine passée à la fonction va, pour chaque caractère, chercher le startline et endline des maps en question et afficher chaque ligne.

              De fait impossible d'aligner deux caractères.

              Suis-je obligé de prendre chaque ligne de chaque caractère, les concaténer et de les print une par une ?

              Tout à fait, je vous montre le code lègerement modifier, avec le main.

              func main() {
              ascii("b")

              }

              func ascii(car string) {
              var start = map[string]int{"a": 299, "b": 308, "c": 317, "d": 326}
              var end = map[string]int{"a": 305, "b": 314, "c": 323, "d": 332}
              filename := "C:\\Users\\adrie\\OneDrive\\Documents\\ynov\\Hangman\\word\\standard.txt"
              startLine := start[car]
              endLine := end[car]
              filename = "C:\\Users\\adrie\\OneDrive\\Documents\\ynov\\Hangman\\word\\standard.txt"
              file, err := os.Open(filename)
              if err != nil {
              fmt.Println("error1")
              return
              }
              //defer file.Close()

              scanner := bufio.NewScanner(file)
              currentLine := 0

              for scanner.Scan() {
              currentLine++
              if currentLine >= startLine && currentLine <= endLine {
              fmt.Println(scanner.Text())
              }
              if currentLine == endLine {
              break
              }
              }

              if err := scanner.Err(); err != nil {
              fmt.Println("error3")
              return
              }

              return
              }
              • Partager sur Facebook
              • Partager sur Twitter
                15 novembre 2023 à 18:09:38

                AdFr1 a écrit:

                Suis-je obligé de prendre chaque ligne de chaque caractère, les concaténer et de les print une par une ?

                Il me semble que c'est ce que j'ai indiqué dans ma 1ère réponse.

                De plus ta fonction ascii ne traite qu'un seul caractère, si on lui en passe 2, rien ne se fait, du fait que l'on ne détermine start et end à partir de car (si on passe "aa" à ascii, "aa" n'est pas présent dans les maps, donc start["aa"] et end["aa"] ne renvoient rien.

                • Partager sur Facebook
                • Partager sur Twitter
                  15 novembre 2023 à 22:12:25

                  Tout à fait, j'ai trouvé une réponse, mais vous remercie du temps passé à répondre.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Print un string sans retour à la ligne

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown