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 :

Nombre de caractère dans un string


Sujet :

C++

  1. #1
    splash68
    Invité(e)
    Par défaut Nombre de caractère dans un string
    Bonjour,

    j'aimerai compter le nombre d'occurrence du caractère ' (apostrophe) dans une chaine de caractère (String) .
    J'aimerai faire cela afin de pouvoir doubler l'apostrophe à chaque occurrence dans cette même string

    merci d'avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Tu peux utiliser la fonction count_if (disponible dans l'espace de noms std par inclusion du fichier <functional>) pour y arriver assez rapidement

    un petit exemple:
    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 <iostream> // pour l'affichage
    #include <algorithm> // pour (entre autre) count_if
    bool isAppostrophe(char const c)
    {
        return c=='\'';
    }
     
    int main()
    {
        std::string str("salut\'\'comment va\'tu?");
        int val=std::count_if(str.begin(),str.end(),isAppostrophe);
        std::cout<<val;
        return 0;
    }
    ou, si tu ne veux pas te taper l'écriture d'un tas de fonctions finalement similaires (pour tous les caractères que tu voudrais pouvoir compter), tu peux envisager une fonction template proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <char c>
    bool isChar(char const c2){return c2==c;}
    que tu utiliserais sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main()
    {int main()
    {
        std::string str("salut comment va tu?");
        std::cout<<std::count_if(str.begin(),str.end(),isChar<'c'>)<<std::endl
                 <<std::count_if(str.begin(),str.end(),isChar<'m'>)<<std::endl
                 <<std::count_if(str.begin(),str.end(),isChar<'a'>)<<std::endl
                 <<std::count_if(str.begin(),str.end(),isCharFun<' '>)<<std::endl;
        return 0;
    }
    Et il serait même possible d'envisager d'utiliser un foncteur, mais bon, est-ce utile
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    splash68
    Invité(e)
    Par défaut
    Merci pour cette réponse claire !

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    S'il s'agit de remplacer un caractère par un autre, tu peux utiliser std::replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <string>
    #include <algorithm>
    #include <iterator>
     
    #include <iostream>
    int main()
    {
       std::string chaine("salut\'\'comment vas\'tu?");
       std::replace(chaine.begin(),chaine.end(),'\'','\"');
       std::cout<<"chaine = "<<chaine<<"\n";
     
       return 0;
    }
    Voir l'ensemble des algos dans ce tuto : Les algorithmes de la STL, par r0d.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je crois que le PO veut dédobuler les apostrophes (sans doute parce qu'il fait de l'SQL à coté )
    Voici un code que j'ai écrit dans une autre vie:
    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
    _bstr_t DoubleApos(const _bstr_t & inStr)
    {
    	_bstr_t outStr;
    	BSTR p=inStr;
    	if (p)
    	{
    		wchar_t wc[2];
    		wc[1]=0;
    		unsigned int u=0,vMaxSize=inStr.length();
    		while ((wc[0]=*p)!=0 && u<vMaxSize)
    		{
    			outStr+=wc;
    			if (wc[0]==L'\'')
    				outStr+=wc;
    			u++;
    			p++;
    		}
    	}
    	return outStr;
    }
    Il ne doit pas être bien compliqué à modifier en remplaçant _bstr_t par std::string ou wstring.

    Et comme je suis sympa, voici une solution plus générale toute faite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define STR_LEN(s) (s),(sizeof(s)-1)
     
    void FindAndReplace(std::string & s,const char *os,unsigned oslen,const char *ns,unsigned nslen)
    {
    	if (os==0 || oslen==0)
    		return;
    	for (std::string::size_type pos=0;(pos=s.find(os,pos,oslen))!=s.npos;pos+=nslen)
    		s.replace(pos,oslen,ns,nslen);
    }
    à utiliser comme ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FindAndReplace(ma_string,STR_LEN("'"),STR_LEN("''"));

  6. #6
    splash68
    Invité(e)
    Par défaut
    Merci beaucoup pour toutes ces précisions

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

Discussions similaires

  1. Nombre maximun de caractères dans uns String
    Par djdada dans le forum ASP.NET
    Réponses: 18
    Dernier message: 04/04/2008, 14h09
  2. [AS] Nombre d'occurences dans une string
    Par frol dans le forum Flash
    Réponses: 3
    Dernier message: 26/12/2005, 15h13
  3. [W3C] Nombre de caractère dans les formulaires
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 01h37
  4. [VBA] Un caractère dans un string
    Par Neilos dans le forum Access
    Réponses: 5
    Dernier message: 23/06/2005, 14h58
  5. Connaitre le nombre de caractère ";" dans un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/11/2004, 17h36

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