Partage
  • Partager sur Facebook
  • Partager sur Twitter

créer un convertisseur

    2 janvier 2009 à 16:41:30

    Bonjours, je suis nouveau en tant qu'inscrit mais je suis souvent venus sur votre site web pour apprendre à créer un site web et la je m'attaque au C/C++. J'ai lut le cours mais je voulais votre avis sur un projet qui me trotte dans la tête:

    Créer un convertisseur

    Mais pas un convertisseur euros/franc par exemple mais plutôt un convertisseur de texte je m'explique:

    Je suis assez fan des pseudo bien mis en forme et je voudrais créer un logiciel qui pourrait me traduire par exemple
    Maison en мαιѕσи

    Donc je voulais savoir si cela serait assez simple à faire sachant que je possède la traduction de chaque lettres

    Merci encore pour vos tuto et votre site

    Au revoir
    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2009 à 16:56:05

      Oui, très! tu remplaces chaque lettre par celle que tu veux! une par une!

      Bon courage!
      • Partager sur Facebook
      • Partager sur Twitter
        2 janvier 2009 à 17:03:29

        euu serait-il possible d'avoir un bout de code car le je rame beaucoup
        • Partager sur Facebook
        • Partager sur Twitter
          2 janvier 2009 à 17:09:04

          Et bien un simple switch genre :
          switch(lettre)
          {
          case 'a':
          lettre = '@'
          break;
          ...
          }
          

          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2009 à 17:15:56

            j'ai juste oublié de préciser je suis novice en programmation et donc la le fait d'inviter l'instruction switch ne m'avance pas. enfaite si je continu je vais vous demandez le code complet et je suppose que personne auras le courage de le faire donc merci pour vos réponses et je vais trouver autre chose pour le faire

            Bon j'ai décidé d'ésseiler et oui on va pas mourir pour ça, donc voila le bout de code que j'ai fait désolé si certaines choses essentielle sont absente mais j'ai un peu paniquer à un moment et certains truc sont passé à la trappe:

            #include <stdio.h>
            #include <stdlib.h>

            int main(int argc, char *argv[])
            {

            switch (lettre);

            {
            case 'a':
            lettre = 'å';
            break;
            case 'b':
            lettre = '@';
            break;
            case 'c':
            lettre = '@';
            break;
            case 'd':
            lettre = '@';
            break;
            case 'e':
            lettre = '@';
            break;
            case 'f':
            lettre = '@';
            break;
            case 'g':
            lettre = '@';
            break;
            case 'h':
            lettre = '@';
            break;
            case 'i':
            lettre = '@';
            break;
            case 'j':
            lettre = '@';
            break;
            case 'k':
            lettre = '@';
            break;
            case 'l':
            lettre = '@';
            break;
            case 'm':
            lettre = '@';
            break;
            case 'n':
            lettre = '@';
            break;
            case 'o':
            lettre = '@';
            break;
            case 'p':
            lettre = '@';
            break;
            case 'q':
            lettre = '@';
            break;
            case 'r':
            lettre = '@';
            break;
            case 's':
            lettre = '@';
            break;
            case 't':
            lettre = '@';
            break;
            case 'u':
            lettre = '@';
            break;
            case 'v':
            lettre = '@';
            break;
            case 'w':
            lettre = '@';
            break;
            case 'x':
            lettre = '@';
            break;
            case 'y':
            lettre = '@';
            break;
            case 'z':
            lettre = '@';
            break;
            }

            system("PAUSE");
            }

            j'ai volontairement laissé les @
            • Partager sur Facebook
            • Partager sur Twitter
              2 janvier 2009 à 23:26:33

              OURGH.

              Bon alors déjà, va lire le règlement catégorie Présentation des codes.

              J'ai jeté un coup d'oeil dans ton code. Déjà, je pense que ce que tu veux faire c'est transformer le presse papier en gros quoi. Déjà, est-ce que le presse papier supporte les fonts ? Tu t'es posé la question ? Je pense déjà qu'il va te falloir apprendre à l'utiliser ce presse papier, il doit exister des fonctions qui devrait te permettre de faire ça simplement (cela dit je n'ai jamais cherché).

              Mais j'ai une autre idée, après ça plait ou pas : sous Linux on passe TOUT LE TEMPS par un Terminal (ou Konsole, ou Console DOS pour les windowsiens). Tu peux passer des arguments en ligne de commande, personnellement je suis assez attaché à ce principe, je trouve ça vraiment cool. Donc essaie de te renseigner ;) Tu pourrais par la suite faire des trucs à la :

              // Tes includes qui vont bien
              
              int main(int argc, char *argv[])
              {
                  if (argc > 1) // Si il y a des arguments quoi 
                      // Alors tu chopes toutes les chaines que tu transformes 
              
                  else
                      // Bah, tu peux par exemple afficher un "About ..." ou un "Help", tu vois le principe.
              
              }
              


              Et ainsi compilé sous le nom de presst par exemple :
              presst Tout ceci sera transformé par exemple


              La plupart des gens écrive la fonction main avec argc et argv sans savoir ce que c'est, c'est pourtant très simple, et utile :).

              Bon finis mes conseils, en ce qui concerne ton code, déjà tu switches une variable qui n'existe pas ... Ensuite, bien que ce ne soit pas obligatoire, tu as oublié le default :. Je précise que compiler un switch sous g++ en -Wall génère de belles injonctions :D . Pire, tu as mis un ';' après le switch : NON. l'instruction switch comprend tout son bloc ! Donc pas de ';' après la parenthèse du switch ;)
              • Partager sur Facebook
              • Partager sur Twitter
                3 janvier 2009 à 4:00:44

                Salut.

                Le switch, fait le uniquement si tu desire te compliquer la vie plus qu'autre chose. Sinon, tu as un choix plus simple: 2 chaines de charactere. La premiere concerne les minuscules, la seconde les majuscules.
                Tu parcours la chaine de charactere que tu veux convertir. Si le charactere que tu regardes est une minuscule, tu affiche le charactere de la chaine minuscule correspondant. Pareil dans le cas d'une majuscule.

                Comme je m'ennuyais, j'ai fait ce programme. S'il te plait, ne le regarde pas avant d'avoir teste de le faire par toi-meme.

                Un apercu de ce qu'il fait (en console linux) :
                masteryoda@Kenny:~/Programmation/C/SiteDuZero$ gcc -W -Wall -Werror -Wstrict-prototypes
                masteryoda@Kenny:~/Programmation/C/SiteDuZero$ ./test aBc
                @8[
                masteryoda@Kenny:~/Programmation/C/SiteDuZero$ ./test AbC
                4b<
                masteryoda@Kenny:~/Programmation/C/SiteDuZero$


                Le code en lui-meme. Je ne l'ai pas commente, c'est un choix. Si tu ne comprends par une commande, dis-le en precisant ce qui te parais bizarre. Ne fais pas un copie/colle, ca ne sert a rien.

                #include <unistd.h>
                #include <stdlib.h>
                
                void    my_putchar(char c)
                {
                  write(1, &c, 1);
                }
                
                void    my_putstr(char *str)
                {
                  int   count;
                
                  count = 0;
                  while (str[count] != '\0')
                    my_putchar(str[count++]);
                }
                
                int     my_strlen(char *str)
                {
                  int   count;
                
                  count = 0;
                  while (str[count] != '\0')
                    count++;
                  return (count);
                }
                
                int     is_min(char c)
                {
                  if (c >= 'a' && c <= 'z')
                    return (1);
                  return (0);
                }
                
                int     is_maj(char c)
                {
                  if (c >= 'A' && c <= 'Z')
                    return (1);
                  return (0);
                }
                
                char    *conv(char *str)
                {
                  char  min[27] = "@b[...\0";
                  char  maj[27] = "48<...\0";
                  int   count;
                  char  *str2;
                
                  str2 = malloc(sizeof(str2) * my_strlen(str));
                  count = 0;
                  while (str[count] != '\0')
                    {
                      if (is_min(str[count]))
                        str2[count] = min[str[count] - 'a'];
                      if (is_maj(str[count]))
                        str2[count] = maj[str[count] - 'A'];
                      count++;
                    }
                  str2[count] = '\0';
                  return (str2);
                }
                
                int     main(int argc, char **argv)
                {
                  char  *str;
                
                  if (argc == 2)
                    {
                      str = conv(argv[1]);
                      my_putstr(str);
                      free(str);
                    }
                  my_putchar('\n');
                  return (0);
                }
                

                • Partager sur Facebook
                • Partager sur Twitter
                  3 janvier 2009 à 11:05:23

                  merci pour le code mais si je ne m'abuse il ne marche pas pour l'environnement windows?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 janvier 2009 à 12:06:09

                    Voila se que me donne le programme avec le code :

                    Process returned 0 (0x0) execution time : 2.281 s

                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 janvier 2009 à 12:55:14

                      La fonction write() est conforme à la norme POSIX.1, tu ne pourras sûrement pas l'utiliser sur Windows.

                      Mais tu peux remplacer :

                      - my_putchar() par putchar() <stdio.h>
                      - my_putstr() par puts() <stdio.h>
                      - my_strlen() par strlen() <string.h>
                      - is_min() par islower() <ctype.h>
                      - is_maj() par isupper() <ctype.h>

                      qui font parties de la bibliothèque standard du C et sont donc portables (pourquoi avoir réinventé la roue ? o_O ).

                      D'autre part,

                      str2 = malloc(sizeof(str2) * my_strlen(str));
                      


                      est à remplacer par

                      str2 = malloc(sizeof (*str2) * (strlen(str) + 1));
                      


                      A noter que la fonction conv() proposée, bien que plus élégante que l'énorme switch ( :D ), ne fonctionnera que si ton codage des caractères est basé sur l'ASCII, mais c'est probablement le cas. :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 janvier 2009 à 13:02:17

                        Surtout qu'il est préférable d'utiliser des outils optimisés, meme si l'envie vous prend de "réinventer la roue" :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 janvier 2009 à 18:36:40

                          "Réinventer la roue" peut-être, mais pourquoi pas? Cela permet de se rappeler qu'avec peu de fonctions système, il est possible de faire un code fonctionnel (sous unix en tout cas). Et puis, profiter de son ennui pour aider les jeunes qui commencent, ça n'a rien de démoniaque ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 janvier 2009 à 19:32:44

                            Non certes, et d'un point de vue pédagogique c'est très bien ;) . Mais une fois qu'il aura compris comment ça fonctionne, il devra utiliser des méthodes à la strlen, [ou les vector pour les listes génériques par exemple. == HS, pardon ]
                            • Partager sur Facebook
                            • Partager sur Twitter

                            créer un convertisseur

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown