Partage
  • Partager sur Facebook
  • Partager sur Twitter

chaine de caractère

Anonyme
    7 décembre 2019 à 13:09:50

    Bonjour 

    je dois faire un programme qui demande à l'utilisateur d'entrer un mot, le programme doit:                                                                                                                                           

    -reporte la 1ere lettre du mot en fin de mot 

    -rajouter un e et un m à la fin du mot

    -remplace la première lettre du mot par L      

                                                                                                                                                                        Voilà ce que j'ai commencé à faire (rajouter un e en fin de mot  mais ça ne fonctionne pas):

    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main()
    {
    	char chaine1[100];
    	char chaine2[100] = "e";
    		
    	printf("entrer un mot\n");
    	scanf_s("%c", &chaine1);
    
    	strcat(chaine1,chaine2);
    
    	printf("%s", chaine1);
    	
    
    	return EXIT_SUCCESS;
    
    
    }

    je viens de commencer le cour sur les caractères j'ai un peu du mal à les manipuler, pouvez vous m'aider svp

    merci 

    -
    Edité par Anonyme 7 décembre 2019 à 13:11:01

    • Partager sur Facebook
    • Partager sur Twitter
      7 décembre 2019 à 13:33:26

      Entrer un mot, c'est donc une chaîne de caractère, Pour la saisie d'une chaîne de caractère le spécificateur de format est %s et non pas %c !
      • Partager sur Facebook
      • Partager sur Twitter
        7 décembre 2019 à 13:45:18

        Et puis il ne faut pas indiquer le signe & avant le nom de la chaîne de caractères. Et dans ce cas ton programme marche à condition de remplacer chaine2[0] par chaine1[0] (tu vois pourquoi ?).

        Pour placer la première lettre du mot en fin de mot, j'aurais procédé ainsi : 

        n = strlen(mot) ; // (je n'ai pas contrôlé que n soit < 100, il vaudrait mieux...)
        /* mot[0] est la première lettre, mot[n-1] est la dernière lettre */
        mot[n] = mot[0] ; // après la dernière, on place la première
        mot[n+1] = '\0' ; // et on n'oublie pas de mettre un caractère nul pour clore la chaîne
        

        C'est une autre façon de faire, sans utiliser les fonctions de manipulation de chaînes mais en exploitant le fait qu'une chaîne est un tableau.

        -
        Edité par robun 7 décembre 2019 à 13:56:55

        • Partager sur Facebook
        • Partager sur Twitter
          7 décembre 2019 à 14:33:26

          Bonjour,

          Une chaîne de caractères, c'est un tableau de caractères avec en dernier le caractère '\0'.
          Pour comprendre l'exercice, c'est comme pour les pointeurs. On fait un dessin :

          avant, exemple pour le mot BOUCHER:
          +---+---+---+---+---+---+---+---+---+---+---+---+---+
          | B | O | U | C | H | E | R | \0|...|...|...|...|...|
          +---+---+---+---+---+---+---+---+---+---+---+---+---+
          après:
          +---+---+---+---+---+---+---+---+---+---+---+---+---+
          | L | O | U | C | H | E | R | B | e | m | \0|...|...|
          +---+---+---+---+---+---+---+---+---+---+---+---+---+

          Il suffit donc de placer les caractères au bon endroit.

          Et attention, la fonction scanf_s de Microsoft demande des paramètres différents de scanf. Pour les formats %c %s et %[], il faut ajouter après l'adresse du paramètre le nombre maximum de caractères accessibles. Donc dans ton cas, ça serait :

          scanf_s( "%s", chaine1, 100 );  // après l'adresse du tableau chaine1 on indique sa capacité
          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

          Anonyme
            8 décembre 2019 à 22:07:56

            Bonjour,

            par rapport à ce que tu m'as dit Robun,  je ne vois pas pourquoi remplacer chaîne2 par chaîne1

            #include <stdio.h>
            #include<stdlib.h>
            #include<string.h>
            
            int main() {
            
            	char chaine1[10];
            	int n;
            	char mot;
            
            
            	printf("entrer un mot\n");
            	scanf_s("%s", chaine1,10);
            
            	n = strlen(mot); 
            
            	mot[n] = mot[0];  
            	mot[n + 1] = '\0';
            
            
            	return EXIT_SUCCESS;
            }

            le code ne fonctionne pas pour placer la première lettre du mot en fin de mot sauf si j'ai mal compris ce qu'on m'a dit

            merci



            -
            Edité par Anonyme 8 décembre 2019 à 22:11:30

            • Partager sur Facebook
            • Partager sur Twitter
              8 décembre 2019 à 22:20:30

              je ne vois pas pourquoi remplacer chaîne2 par chaîne1

              Je n'ai pas dit ça. J'ai dit de remplacer chaine2[0] par chaine1[0]. C'est parce que tu as mis la lettre 'e' dans chaine2[0], alors qu'il faut mettre la première lettre de chaine1 (qui n'est pas forcément 'e').

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                8 décembre 2019 à 23:08:09

                bonjour, 

                c'est bon je viens de comprendre

                #include <stdio.h>
                #include<stdlib.h>
                #include<string.h>
                
                int main() {
                
                	char chaine1[10];
                        int n;
                	
                	printf("entrer un mot\n");
                	scanf("%s", chaine1);
                
                       n = strlen(chaine1); 
                       chaine1[n] = chaine1[0]; 
                       chaine1[n+1] = '\0';
                
                	strcat(chaine1, "em");
                
                	printf("%s", chaine1);
                	
                
                
                  return EXIT_SUCCESS;
                }

                A partir de mon code du haut j'ai essayé d'abord de rajouter un 'l' au début du mot avec ça

                strcat("l", chaine1);

                mais je reçois un segmentation fault.  Quel est le problèmes svp.

                -
                Edité par Anonyme 16 décembre 2019 à 22:42:33

                • Partager sur Facebook
                • Partager sur Twitter
                  10 décembre 2019 à 13:26:19

                  Il me semble, tel que tu as appelé 'strcat', que le résultat de la concaténation de "l" et chaine1 sera mis dans la chaîne "l". Or cette chaîne ne t'appartient pas (ce n'est pas une variable mais une constante littérale), tu ne peux pas la modifier, d'où l'erreur de segmentation.

                  Mais je ne crois pas que ce soit la bonne méthode : ça va ajouter "l" devant la chaîne 1, alors que le but est, comme tu l'as dit, de remplacer la première lettre de chaine1 par un "l" (à moins que j'aie mal compris). Donc il faut juste remplacer chaine[0] par un "l".

                  -
                  Edité par robun 10 décembre 2019 à 13:26:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 décembre 2019 à 20:45:05

                    bonjour

                    je n'arrive toujours pas à remplacer la première lettre de la chaîne de caractère par la lettre "l" c'est la seul chose qui me manque. Pouvez vous m'aider svp mon code actuelle est le même que mon dernier message.  

                    merci    

                    -
                    Edité par Anonyme 12 décembre 2019 à 21:56:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 décembre 2019 à 21:37:38

                      Hello,

                      Si c'est juste remplacer la première lettre par la lettre 'l' (et pas insérer, ce qui est très différent)

                      chaine1[0]='l';
                      • Partager sur Facebook
                      • Partager sur Twitter

                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      Anonyme
                        12 décembre 2019 à 21:53:57

                        bonjour, 

                        j'ai déjà essayé de faire ça mais ça ne fonctionne pas, enfaîte je ne vois juste pas comment le mettre et pourquoi.  De plus moi j'ai chaine1[10] et non pas 0, il faudrait bien une taille pour un caractère non ?

                        merci

                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 décembre 2019 à 22:10:14

                          D'après ce que je lis, tu as essayé "l" , pas 'l' -- la première écriture est un tableau de caractères, la seconde est un caractère.

                          chaine1[10] ligne 7 déclare un tableau de 10 éléments de type caractère, chaine1[0] (dans ce que j'ai écit) est le premier élément de ce tableau -- et donc, un caractère dans le cas présent.

                          Au fait, pas 'l' mais 'L' d'après l'énoncé.

                          -
                          Edité par edgarjacobs 12 décembre 2019 à 22:13:48

                          • Partager sur Facebook
                          • Partager sur Twitter

                          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                            13 décembre 2019 à 12:52:06

                            Rre4931 a écrit:

                            j'ai déjà essayé de faire ça mais ça ne fonctionne pas, enfaîte je ne vois juste pas comment le mettre et pourquoi.  De plus moi j'ai chaine1[10] et non pas 0, il faudrait bien une taille pour un caractère non ?

                            Quand tu reçois un conseil et que ça ne marche pas, il y a deux possibilités :

                            - le conseil était mauvais,

                            - tu as mal appliqué le conseil.

                            N'oublie pas la deuxième possibilité ! ;)

                            chaine1[10] n'est pas un objet, c'est un extrait de la ligne de déclaration de l'objet chaine1 : on indique qu'il contient 10 cases (qui vont de 0 à 9). Pour remplacer la première lettre, il faut modifier la première case. La première case s'appelle chaine1[0]. C'est comme ça en C (et la chaîne complète ne s'appelle pas chaine1[10] mais chaine1 tout court).



                            -
                            Edité par robun 13 décembre 2019 à 12:52:52

                            • Partager sur Facebook
                            • Partager sur Twitter

                            chaine de caractère

                            × 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