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
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
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:
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
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; }
que tu utiliserais sous la forme de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template <char c> bool isChar(char const c2){return c2==c;}
Et il serait même possible d'envisager d'utiliser un foncteur, mais bon, est-ce utile
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; }![]()
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
Merci pour cette réponse claire !
Salut,
S'il s'agit de remplacer un caractère par un autre, tu peux utiliser std::replace :Voir l'ensemble des algos dans ce tuto : Les algorithmes de la STL, par r0d.
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; }
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
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:Il ne doit pas être bien compliqué à modifier en remplaçant _bstr_t par std::string ou wstring.
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; }
Et comme je suis sympa, voici une solution plus générale toute faiteà utiliser comme ceci par exemple
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); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part FindAndReplace(ma_string,STR_LEN("'"),STR_LEN("''"));
Merci beaucoup pour toutes ces précisions
Partager