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 :

Décomposer une chaîne de caractères


Sujet :

C

  1. #1
    Membre du Club Avatar de Shapsed
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 49
    Points
    49
    Par défaut Décomposer une chaîne de caractères
    Bonjour,
    Voilà je cherche comment on peut décomposer une chaine de caractères!
    A partir d'un texte entré dans un tableau texte[] grâce à scanf("%s", texte), j'aimerais comprendre comment on peut décomposer les lettres et les chiffres de la chaine de caractères.
    Supposons que j'entre: Salut ca va ?
    Il faudrait décomposer la chaine en: S; a; l; u; t; ; c; a; ; v; a; ; ?;
    Afin de remplacer les différents caractères entrés par la valeur d'une variable qui leur est associée. Supposons que a ait comme nombre associé à sa variable 29, tout les a devront etre remplacés par 29.
    On aurait pour le mot Salut quelque chose du genre 54 29 12 113 91. J'invente, mais sur le principe c'est ca. Faut-il utiliser l'ASCII pour faciliter les choses et ainsi gerer des caractères comme le point d'exclamation, l'espace, etc... ?
    Si quelqu'un peut m'éclairer!
    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Points : 113
    Points
    113
    Par défaut
    pour lire une chaine de caractères, on peut parcourir la chaine avec une boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i;
    char caractere;
    for(i=0; i<strlen(texte); i++)
    {
        caractere=texte[i];
        ...
    }

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    scanf("%s", text) est un très mauvais choix pour saisir une chaine de caractère en général (Attention au débordement de tampon). Par ailleurs, cette utilisation de scanf() ne te permet de saisir que des mots et non des phrases. Je recommande l'utilisation systématique de fgets() pour toute saisie.

    Pour ce qui est de la décomposition, tu fait une simple boucle pour itérer à travers la chaine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main(void)
    {
        char text[] = "Salut ca va?";
        int i;
     
        for (i = 0; text[i] != '\0'; ++i)
        {
     
            printf("%c;", text[i]);
        }
        return 0;
    }
    Thierry

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Pour faire correspondre chaque caractère à un entier autre que son code ASCII, tu peux définir un tableau d'entiers de 256 cases où tableau['S'] vaut 54, tableau['a'] vaut 29, etc.

    Thierry

  5. #5
    Membre du Club Avatar de Shapsed
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 49
    Points
    49
    Par défaut
    A l'éxécution ca donne: S; a; l; u; t; ; c; a; ; v; a; ; ?;
    En fait je recherchais, non pas a afficher "S; a; l; u; t; ; c; a; ; v; a; ; ?;" mais à afficher les valeurs correspondant aux lettres (la casse est importante, A est différent de a).
    Or comment on peut obtenir d'une part la chaine en clair avec "Salut ca va ?" et l'autre en numérique avec "25 63 87 12 98 34 ..." ?
    Tout simplement un code qui permette de rechercher une lettre et de la modifier par le nombre correspondant a la variable de la lettre.

  6. #6
    Membre du Club Avatar de Shapsed
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 49
    Points
    49
    Par défaut
    PS: En tout cas ton explication précédente m'a appris énormément de choses. MERCI!

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Un caractère n'est autre qu'un simple entier et donc, tu peux par exemple afficher le code du caractère courant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%d\n", texte[i]);
    De même, tu peux mettre dans un tableau de même taille que ta chaîne, le code de chacun des caractères composant ta chaîne, toujours par le biais d'une boucle, par une simple affectation du caractère courant dans le tableau d'entier !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_entier[i] = texte[i];

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Shapsed Voir le message
    Or comment on peut obtenir d'une part la chaine en clair avec "Salut ca va ?" et l'autre en numérique avec "25 63 87 12 98 34 ..." ?
    Il faut jouer entre %d et %c :
    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
    int main()
    {
        char texte[] = "Salut, ca va ?";
        int i = 0;
     
        for (i=0; texte[i]!='\0'; ++i)
                /* %c  "écrit" la valeur correspondant à la lettre */
            printf("%c", texte[i]);
     
        printf("\n");
     
        for (i=0; texte[i]!='\0'; ++i)
                /* %d  "écrit" la valeur numérique */
            printf("%d ", texte[i]);
     
    	return 0;
    }
    EDIT : plus rapide

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Je ne crois pas que le PO veut remplacer chaque caractère par le code ascii correspondant, mais par un entier arbitraire. Dans ce cas, la technique du tableau de conversion décrite plus haut est à mon avis adaptée.

    Thierry

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 46
    Points
    46
    Par défaut
    Voici un exemple qui permet d'avoir les caracteres hexadecimal de la chaine, la valeur en décimal et la chaine en caracteres.

    Dans ce cas je prefere utiliser des do ... while, car dans une chaine de type char ta chaine se termine toujours pas le caractere \0 soit 0.

    Mais tu peux le faire aussi avec un for comme ils te l'on montré plus haut

    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
     
    int main(int argc, char* argv[])
    {
     
    char text[] = "Slt ca va ?" ;
    int i=0;
     
    	//affichage code HEXADECIMAL
     
    	do{
    	   printf("%x ", text[i]);
    	   i++;
     
    	}while (text[i] != '\0');
    	i=0;
    	printf("\n");
    	//affichage code decimal
     
    	do{
    			printf("%d ", text[i]);
    			i++;
    	}while (text[i] != '\0');
     
    	//affichage de la chaine
    	i=0;
    	printf("\n");
    	do{
    			printf("%c", text[i]);
    			i++;
     
    	}while (text[i] != '\0');
     
     
    	return 0;
    }
    Allan
    Images attachées Images attachées  

Discussions similaires

  1. Décomposer une Chaîne de caractère
    Par pepe29 dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/03/2013, 21h11
  2. Réponses: 8
    Dernier message: 12/02/2013, 02h08
  3. [RegEx] Décomposer une chaîne de caractères
    Par Nheavy dans le forum Langage
    Réponses: 0
    Dernier message: 27/06/2012, 20h45
  4. Décomposer une chaîne de caractères
    Par PedroBD dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2006, 19h26
  5. Réponses: 3
    Dernier message: 09/05/2002, 02h39

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