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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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 Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    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 émérite
    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
    Par défaut
    Il y a des fonctions comme "isupper" qui te disent si une lettre est une majuscule

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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 éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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 averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    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++;
    }

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