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 :

Chaîne de caractère coupée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut Chaîne de caractère coupée
    Bonjour,

    Je voudrais réaliser une tâche mais je ne sais pas comment m'y prendre !

    En fait il faut que l'utilisateur rentre une chaine de 10 caractères
    Par exemple ABCDEFGHIJ
    Et le programme devra retourner BCDEFGHI, en fait il supprime le premier et le dernier caractère !
    Mais je ne sais pas comment procéder !

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    j'ai essayé ça après reflexion mais quand je rentre
    01234567890 ça me retourne 012345670123456789

    y'a bien 01234567 mais pourquoi y'a 0123456789 je ne comprends pas !

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main (void)
    {
         char source[10];
         char dest[8];
         char lien[258];
         gets(source);
     
         strncpy(dest, source, 8);
     
         printf("\n%s",dest);
         getch();
     
    }
    Merci

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    ah ok en fait c'est ce que ça doit faire !

    Mais comment je fais alors pour n'avoir que les 8 caractères ? et non les 8 plus les 10 autres ?

    Merci

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    ah ok en fait c'est ce que ça doit faire !

    Mais comment je fais alors pour n'avoir que les 8 caractères ? et non les 8 plus les 10 autres ?

    Merci
    Ton problème vient de ce que strncpy ne place pas forcément le zéro terminal dans la chaîne de destination. C'est le cas si le nombre de caractères de la chaîne source est supérieur ou égal au nombre de caractères copiés. C'est donc ton cas.
    En partant de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main (void)
    {
         char source[10];  // 9 caractères +le zéro terminal
         char dest[8];      // 7 caractères +le zéro terminal
         fgets(source,10,stdin);    // lit 9 caractères maximum  
         strncpy(dest, source+1, 7); // Saute le premier et copie 7 caractères
         dest[7] =0;       // le zéro terminal
         printf("\n%s",dest);     
    }
    Ceci est à perfectionner : que se passe t-il si on tape moins de 9 caractères, ou plus, ... ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut
    Bonjour , pourquoi passez-vous par une chaine intermédiaire?

    Voici un code non testé :
    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
     
    #include <stdio.h>
    #include <string.h>
    int main (void)
    {
         char source[10];  
         int taille;
         fgets(source,10,stdin); 
         taille=strlen(source);
         memmove(source+0,source+1,taille-1);
         source[taille-2]=0;
         printf("\n%s",source);     
     
         return 0;
    }
    Cela devrait marcher

  6. #6
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Bonjour, ce code fonctionne...
    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
     
    # include <stdio.h>
     
    int main (void) 
    {
      char source[256];
      int i=0;
      printf("saisir une chaine de characteres\n>");
      scanf("%s",source);
      while (  i < 8 )
      {
        source[i]=source[i+1];
        i++;
      }
      source[i]='\0';
      printf("%s\n",source);
      return 0;
    }

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    j'ai essayé ça après reflexion mais quand je rentre
    01234567890 ça me retourne 012345670123456789

    y'a bien 01234567 mais pourquoi y'a 0123456789 je ne comprends pas !

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main (void)
    {
         char source[10];
         char dest[8];
         char lien[258];
         gets(source);
     
         strncpy(dest, source, 8);
     
         printf("\n%s",dest);
         getch();
     
    }
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main (void)
    {	int i;
         char source[10];
         char dest[8];
      //   char lien[258];
         scanf("%s",source);
        for(i=1;i<strlen(source)-1;i++)dest[i]=source[i];
    	dest[i]='\0';	     
         printf("\n%s",dest);
         getch();
     
    }

  8. #8
    Membre éprouvé Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Par défaut
    salut

    Essaye ça :

    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
     
    int main (void)
    {	
    	char source[10];
            char dest[8];
    	int i;
     
    	// faut vérifier qu'il y a bien 10 carac pas plus
    	printf("Taper une chaine de 10 caractères : ");
    	gets(source);
     
    	printf("%s\n\n",tampon);
     
    	for (i = 0 ; i < strlen(source) - 2 ; i++)
    	{
    		dest[i] = source[i+1];
     
    	}
    	dest[i]='\0';
    	printf("\n%s",dest);
    	printf("\n\n");
     
    	return 0;
    }
    Bonne chance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. le caractère > coupe mes chaînes
    Par whims dans le forum Langage
    Réponses: 6
    Dernier message: 29/07/2010, 10h15
  3. Chaînes de caractères
    Par Zazeglu dans le forum C
    Réponses: 3
    Dernier message: 28/08/2003, 16h20
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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