IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Chaine de caractere + question?


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut Chaine de caractere + question?
    Ecrire un programme qui supprime la première occurrence d'une chaîne de caractères OBJ dans une chaîne de caractères SUJ.

    Exemples: PHON ALPHONSE ALSE


    Corrigé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include <stdio.h>
    main()
    {
     /* Déclarations */
     char SUJ[100]; /* chaîne à transformer        */
     char OBJ[100]; /* chaîne à supprimer dans SUJ */
     int I;         /* indice courant dans SUJ     */
     int J;         /* indice courant dans OBJ     */
     int TROUVE;    /* indicateur logique qui précise */
                    /* si la chaîne OBJ a été trouvée */
     
     /* Saisie des données */
     printf("Introduisez la chaîne à supprimer   : ");
     gets(OBJ);
     printf("Introduisez la chaîne à transformer : ");
     gets(SUJ);
     /* Recherche de OBJ dans SUJ */
     TROUVE=0;
     for (I=0; SUJ[I] && !TROUVE; I++)
        /* Si la première lettre est identique, */
        if (SUJ[I]==OBJ[0])
            {
             /* alors comparer le reste de la chaîne */
             for (J=1; OBJ[J] && (OBJ[J]==SUJ[I+J]); J++)
                ;
             if (OBJ[J]=='\0') TROUVE=1;
            }
     /* Si la position de départ de OBJ dans SUJ a été trouvée */
     /* alors déplacer le reste de SUJ à cette position. */
     if (TROUVE)
        {
         I--;
         /* Maintenant  I indique la position de OBJ */
         /* dans SUJ et J indique la longueur de OBJ */
         for (; SUJ[I+J]; I++)
              SUJ[I]=SUJ[I+J];     SUJ[I]='\0';
        }
      /* Affichage du résultat */
     printf("Chaîne résultat : \"%s\"\n", SUJ);
     return 0;
    }
    ====> en fait j'ai pas compris le SUJ[ i + j ]

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Pour commencer, je te conseille d'utiliser les balise de code, tu peux les créer en utilisant le bouton # juste au-dessus de la zone de texte.
    Sinon le principe des commentaires en /* */ c'est justement de pouvoir être utilisés sur plusieurs lignes, donc pas besoin de les fermer à la fin de la ligne et de les ré-ouvrir sur la ligne suivant pour continuer le commentaire.
    Évite les noms de variables commençant par des majuscules aussi, ce sera plus lisible je pense...

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ensuite il est fortement déconseillé d'utiliser gets ....

    fgets est conseillé...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Citation Envoyé par hammouch Voir le message
    ====> en fait j'ai pas compris le SUJ[ i + j ]
    SUJ[i+j] est le caractère qui est est à la position i+j de la chaîne de caractères SUJ. (Le premier caractère est à la position 0)

    Tu compares le caractère à la position J de OBJ avec le caractère à la position I+J de SUJ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (; SUJ[I+J]; I++) SUJ[i]=SUJ[I+J];
    Tu copies le caractère à la position I+J à la position I jusqu'à ce que la condition SUJ[I+J] soit fausse, c'est-à-dire SUJ[I+J] == '\0', soit la fin de la chaîne.

    Apparemment, ce n'est pas de ta création. D'où vient ce corrigé ? Il est bizarrement écrit.

Discussions similaires

  1. Question et chaine de caractere
    Par Flowmo dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 19/03/2013, 11h17
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. question sur les chaine de caractere en c
    Par zazloux dans le forum C
    Réponses: 7
    Dernier message: 06/11/2007, 10h34
  4. Question débutant chaine de caracteres.
    Par cisqo dans le forum Débuter
    Réponses: 8
    Dernier message: 12/07/2007, 18h08
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo