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 :

Inverser Chaîne de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut Inverser Chaîne de caractères
    Bonjour je cherche a inverser une chaine de caracteres mais mon code ne marche pas pouvez vous m'aider :

    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
    #include <stdio.h>
    #include <string.h>
     
    void reverse(char *chaine1, char *chaine2);
     
    int main (int argc, const char * argv[]) {
    	char chaine1[100];
    	char chaine2[100];
    	printf("Entrez une chaine de caracteres : ");
    	fgets(chaine1, sizeof chaine1, stdin);
    	printf("Vous avez entré : %s", chaine1);
     
    	reverse(chaine1, chaine2);
        return 0;
    }
     
    void reverse(char *chaine1, char *chaine2)
    {
    	int i;
    	int j = 0;
    	i = strlen(chaine1);
     
    	for (i-1; i=0; i--)
    	{
    		chaine2[j] = chaine1[i];
    		j++;
    	}
    	printf("%s", *chaine2);
    }
    Merci d'avance

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	for (i-1; i>=0; i--)
    	{
    		chaine2[j] = chaine1[i];
    		j++;
    	}
            chaine2[j] = '\0';
    	printf("%s", chaine2); // pas d'*

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Merci Beaucoup

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Dans le même genre je dois modifier dans une chaine les lettres par la suivante, par ex on remplace a par b, mais voila mon code et ca ne marche pas

    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
    #include <stdio.h>
    #include <string.h>
     
    void modifchaine(char *chaine1, char *chaine2);
     
    int main (int argc, const char * argv[]) {
    	char chaine1[100];
    	char chaine2[100];
    	printf("Entrez une chaine de caracteres : ");
    	fgets(chaine1, sizeof chaine1, stdin);
    	printf("Vous avez entré : %s", chaine1);
     
    	modifchaine(chaine1, chaine2);
     
        return 0;
    }
     
    void modifchaine(char *chaine1, char *chaine2)
    {
     
    	while(*chaine1)
    	{
    		if (isalpha(*chaine1))
    		{
    			*chaine1 = *chaine2++;
    		}
    		chaine1++;
    	}
    	printf("%s", *chaine2);
    }

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *chaine2 = *chaine1++;
    chaine2++ ;
    et ton print doit être dans la fonction appelante

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Excuse moi souviron mais je ne comprends pas vraiment

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Spitfire378 Voir le message
    Dans le même genre je dois modifier dans une chaine les lettres par la suivante, par ex on remplace a par b, mais voila mon code et ca ne marche pas

    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
    #include <stdio.h>
    #include <string.h>
     
    void modifchaine(char *chaine1, char *chaine2);
     
    int main (int argc, const char * argv[]) {
    	char chaine1[100];
    	char chaine2[100];
    	printf("Entrez une chaine de caracteres : ");
    	fgets(chaine1, sizeof chaine1, stdin);
    	printf("Vous avez entré : %s", chaine1);
     
    	modifchaine(chaine1, chaine2);
     
        return 0;
    }
     
    void modifchaine(char *chaine1, char *chaine2)
    {
     
    	while(*chaine1)
    	{
    		if (isalpha(*chaine1))
    		{
    			*chaine1 = *chaine2++;
    		}
    		chaine1++;
    	}
    	printf("%s", *chaine2);
    }
    Là encore, il faut un peu réfléchir :
    • parcourir la chaine
    • filtrer les caractères alpha
    • séparer en minuscules et majuscules
    • selon l'alphabet (min, maj), chercher la position de la lettre, ajouter 1 modulo 26 pour ne pas déborder.
    • Récupérer la nouvelle lettre, la copier, ne pas oublier le 0 final...

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
     
    int get_next (char const alpha[], int c)
    {
       int c_out = c;
       char *p = strchr (alpha, c);
       if (p != NULL)
       {
          ptrdiff_t i = (p - alpha + 1) % 26;
          c_out = alpha[i];
       }
       return c_out;
    }
     
    void modifchaine (char *s_new, char const *s_old)
    {
       int i;
       int n = strlen (s_old);
       for (i = 0; i < n; i++)
       {
          unsigned c = s_old[i];
          if (isalpha (c))
          {
             if (isupper (c))
             {
                c = get_next ("ABCDEFGHIJKLMNOPQRSTUVWXYZ", c);
             }
             else
             {
                c = get_next ("abcdefghijklmnopqrstuvwxyz", c);
             }
          }
          s_new[i] = c;
       }
       s_new[i] = 0;
     
    }
     
    int main (void)
    {
       char const chaine1[] = "Hello worldz";
       char chaine2[100];
     
       modifchaine (chaine2, chaine1);
       printf ("chaine1 = '%s'\n", chaine1);
       printf ("chaine2 = '%s'\n", chaine2);
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    chaine1 = 'Hello worldz'
    chaine2 = 'Ifmmp xpsmea'
     
    Press ENTER to continue.

  8. #8
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Et je rajouterais :
    Citation Envoyé par diogene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	for (i=i-1; i>=0; i--)
    	{
    		chaine2[j] = chaine1[i];
    		j++;
    	}
            chaine2[j] = '\0';
    	printf("%s", chaine2); // pas d'*

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Spitfire378 Voir le message
    Bonjour je cherche a inverser une chaine de caracteres mais mon code ne marche pas pouvez vous m'aider :
    Tu peux déjà corriger ç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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:6: warning: unused parameter 'argc'
    main.c:6: warning: unused parameter 'argv'
    main.c: In function `reverse':
    main.c:23: warning: suggest parentheses around assignment used as truth value
    main.c:28: warning: format argument is not a pointer (arg 2)
    main.c:23: warning: statement with no effect
    main.c:25: warning: will never be executed
    main.c:25: warning: will never be executed
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 7 warnings
    Ton code est beaucoup trop complexe. Comme toujours, il suffit de réfléchir 2 minutes avant d'agir...

    Il suffit d'un indice :

    source : 1 -> n-1
    destination : n-1 -> 0

    Ne pas oublier le 0 final.

    Attention aussi au nommage des variables et aux conventions :

    f (destination, source)
    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
     
    #include <stdio.h>
    #include <string.h>
     
    void reverse (char *s_new, char const *s_old)
    {
       int i;
       int n = strlen (s_old);
     
       for (i = 0; i < n; i++)
       {
          s_new[n - i - 1] = s_old[i];
       }
       s_new[n] = 0;
    }
     
    int main (void)
    {
       char const chaine1[] = "Hello world";
       char chaine2[100];
     
       reverse (chaine2, chaine1);
       printf ("chaine1 = '%s'\n", chaine1);
       printf ("chaine2 = '%s'\n", chaine2);
       return 0;
    }

Discussions similaires

  1. [Débutant] Inverser une chaîne de caractères
    Par zbooon dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 28/04/2017, 13h44
  2. Inversion d'une chaîne de caractères
    Par camoa dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 31/10/2011, 13h56
  3. Inverser une chaîne de caractères
    Par Nyko17 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 10/05/2008, 19h45
  4. Réponses: 3
    Dernier message: 24/10/2007, 01h47
  5. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09

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