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 :

Manipulation de chaîne : MaChaine -> ma_chaine


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Manipulation de chaîne : MaChaine -> ma_chaine
    Hello,

    J'ai besoin de convertir des chaines de caractères se présentant sous la forme :

    MaChaineDeCaracteres

    et de la transformer en :

    ma_chaine_de_caracteres

    Je dispose de fonction pour tout passer en majuscules ou minuscules. Je pense donc qu'il faudrait tout passer en minuscule, faire une comparaison avec la chaine originale, et repérer les différences.

    Existe-t-il un moyen de faire cela avec la STL ou Boost, ou dois-je faire une boucle bête et méchante ?

    L'idéal serait de finir avec un champ de bits...

    Merci.

  2. #2
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Tu peux faire ça en une seule boucle de copie, sans comparaison.
    Regarde la table ASCII, il suffit de prendre une valeur intelligente entre les majuscules et les minuscules (genre 91) et tu compares directement la valeur courante comme ça.
    Si c'est inférieur à 91, alors c'est une majuscule. Tu copies en minuscule et t'insères un underscore...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Il y a des fonctions comme "isupper" qui te disent si une lettre est une majuscule

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Merci bien !

    Petit problème : je dois ensuite ajouter ce caractère à un string d'une API, via un opérateur + surchargé, mais c'est la valeur ASCII qui est ajoutée à la chaîne !

    L'opérateur + de la classe string en question étant surchargé pour un char* et un int (parmi d'autres types).

    Dois-je créer une nouvelle chaîne char* pour mettre mon caractère, et ajouter le caractère de fin de chaîne, avant de faire cette concaténation ??

    Désolé, mais je ne suis pas très l'aise dès que descend au niveau du C...

    En fait, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* pouet = "0";
    pouet[0] =tolower(c);
    finalParameterName += pouet;
    Mais la 2ème ligne plante l'application...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Bon, j'ai résolu le problème en changeant la première déclaration. Au lieu d'utiliser un pointeur, j'utilise un tableau...

    Mon C est décidément TRES loin.....

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Quelques trucs à améliorer, mais c'est pour la philosophie du truc :

    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
    char phrase [] = "MaChaineDeCaracteres"; //La chaîne à convertir
    char final[MAX_PATH]; memset(final, 0x00, MAX_PATH); //La chaîne de destination.
    int j=0; char ch=0x00;
     
    for(int i=0; i<=strlen(phrase) ;i++)
    {
    	ch=phrase[i];
    	if(ch <= 0x5a && ch >= 0x41 ) // Si compris entre A et Z
    	{
    		if(i!=0)
    		{
    			final[j]=0x5f; //caractères "_" en héxa.	
    			j++;
    		}
    		ch = ch+32; //écart dans la table ascii entre a et A
    		final[j]=ch;
     
    	}
    	else final[j]=phrase[i];
    	j++;
    }

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Pourquoi tu crées pas une std::string et tu envoies le char* de c_str()?

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Parce que je récupère la chaîne à partir d'une API qui a sa propre classe string, et que je ne peux pas directement la convertir en std::string.

Discussions similaires

  1. Manipulation de chaînes de caractères
    Par carreau dans le forum Contribuez
    Réponses: 1
    Dernier message: 26/10/2006, 10h46
  2. Manipulation de chaînes de caractères
    Par sbeprod dans le forum Access
    Réponses: 15
    Dernier message: 28/07/2006, 14h33
  3. Manipulation de chaîne
    Par hichamo dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2006, 13h30
  4. Réponses: 3
    Dernier message: 07/12/2005, 10h09
  5. Etat - Manipulation de chaînes de caractères
    Par migaleb dans le forum Access
    Réponses: 3
    Dernier message: 07/12/2005, 09h55

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