Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recherche d'une sous chaine et chaine vers tableau(ou vector)

9 réponses
Avatar
Didier
bonjour,

je débute en C++ et C tout court d'ailleur;

s1 = "titi tutu tototo"
s2 = "titi tutu toto"
s3 = "titi tutu toto " (un espace à la fin)

je recherche la chaine "toto" exclusivement,
comment faut-il faire ?
dans s1 il y a bient tototo, mais c'est toto que je cherche, s1 pas ok, s2
et s3 ok



ma deuxième question :

comment faire pour intégrer une chaine dans un tableau ou un vector,
exemple : s1 = "25.33 17.34 67.00" les valeurs sont séparée pas des espaces,
je voudrait que chaque valeur devienne l'élément d'un tableau.

d'avance merci

didier

9 réponses

Avatar
Guillaume LEMAÎTRE
Didier wrote:
bonjour,

je débute en C++ et C tout court d'ailleur;

s1 = "titi tutu tototo"
s2 = "titi tutu toto"
s3 = "titi tutu toto " (un espace à la fin)

je recherche la chaine "toto" exclusivement,
comment faut-il faire ?
dans s1 il y a bient tototo, mais c'est toto que je cherche, s1 pas ok, s2
et s3 ok



donc ça n'est pas tot que tu cherches, c'est
[caractère séparateur]"toto"[caractère séparateur]
avec [caractère séparateur] = début de chaîne | fin de chaine | blanc |
tabulation

Avatar
Didier
"Guillaume LEMAÎTRE" a écrit dans le message de
news:c254kr$89b$
Didier wrote:
bonjour,

je débute en C++ et C tout court d'ailleur;

s1 = "titi tutu tototo"
s2 = "titi tutu toto"
s3 = "titi tutu toto " (un espace à la fin)

je recherche la chaine "toto" exclusivement,
comment faut-il faire ?
dans s1 il y a bient tototo, mais c'est toto que je cherche, s1 pas ok,
s2


et s3 ok



donc ça n'est pas tot que tu cherches, c'est
[caractère séparateur]"toto"[caractère séparateur]
avec [caractère séparateur] = début de chaîne | fin de chaine | blanc |
tabulation



si s4 = "titi toto tutu" c'est ok aussi,
si s5 ="toto" ou " toto" ou "toto " ou " toto " c'est ok

"tototo " c'est pas bon...

je cherche toto, quel que soit sa position dans la chaine


Avatar
Luc Hermitte
Salut,

"Didier" wrote in
news:c25353$lg4$:

s1 = "titi tutu tototo"
s2 = "titi tutu toto"
s3 = "titi tutu toto " (un espace à la fin)

je recherche la chaine "toto" exclusivement,
comment faut-il faire ?
dans s1 il y a bient tototo, mais c'est toto que je cherche, s1 pas
ok, s2 et s3 ok


A coup de find (méthode de std::string) plus tests de présence d'espaces
on doit pouvoir s'en sortir.
Il est aussi possible de mettre la mettre dans un istringstream,
d'extraire chaque morceau et comparer avec ce qui est recherché.
Personnellement, j'opterai plutôt pour la solution des expressions
régulières (boost::regex (http://www.boost.org) -- un chouilla complexe à
installer pour un débutant peut-être, mais au final un code plus succinct
je trouve).

ma deuxième question :

comment faire pour intégrer une chaine dans un tableau ou un vector,
exemple : s1 = "25.33 17.34 67.00" les valeurs sont séparée pas des
espaces, je voudrait que chaque valeur devienne l'élément d'un
tableau.


#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <string>


...{
const std::string s1 = "25.33 17.34 67.00";
std::istringstream iss(s1);

// On rempli le vecteur de doubles
std::vector<double> v;
std::copy(std::istream_iterator(iss), std::istream_iterator(),
std::back_inserter(v));

// On affiche le vecteur de doubles:
std::copy(v.begin(), v.end(),
std::ostream_iterator<double>(std::cout, " -- "));
...

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Avatar
Guillaume LEMAÎTRE
Didier wrote:
"Guillaume LEMAÎTRE" a écrit dans le message de
news:c254kr$89b$


donc ça n'est pas toto que tu cherches, c'est
[caractère séparateur]"toto"[caractère séparateur]
avec [caractère séparateur] = début de chaîne | fin de chaine | blanc |
tabulation




si s4 = "titi toto tutu" c'est ok aussi,
si s5 ="toto" ou " toto" ou "toto " ou " toto " c'est ok

"tototo " c'est pas bon...

je cherche toto, quel que soit sa position dans la chaine




c'est bien ce que je dis

cherche " toto " dans toute la châine et vérifie si elle commence par
"toto " ou si elle se finit par " toto"


Avatar
Didier
Merci pour votre aide, je vai essayer tout çà


Didier



"Luc Hermitte" a écrit dans le message de
news:
Salut,

"Didier" wrote in
news:c25353$lg4$:

s1 = "titi tutu tototo"
s2 = "titi tutu toto"
s3 = "titi tutu toto " (un espace à la fin)

je recherche la chaine "toto" exclusivement,
comment faut-il faire ?
dans s1 il y a bient tototo, mais c'est toto que je cherche, s1 pas
ok, s2 et s3 ok


A coup de find (méthode de std::string) plus tests de présence d'espaces
on doit pouvoir s'en sortir.
Il est aussi possible de mettre la mettre dans un istringstream,
d'extraire chaque morceau et comparer avec ce qui est recherché.
Personnellement, j'opterai plutôt pour la solution des expressions
régulières (boost::regex (http://www.boost.org) -- un chouilla complexe à
installer pour un débutant peut-être, mais au final un code plus succinct
je trouve).

ma deuxième question :

comment faire pour intégrer une chaine dans un tableau ou un vector,
exemple : s1 = "25.33 17.34 67.00" les valeurs sont séparée pas des
espaces, je voudrait que chaque valeur devienne l'élément d'un
tableau.


#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <string>


...{
const std::string s1 = "25.33 17.34 67.00";
std::istringstream iss(s1);

// On rempli le vecteur de doubles
std::vector<double> v;
std::copy(std::istream_iterator(iss), std::istream_iterator(),
std::back_inserter(v));

// On affiche le vecteur de doubles:
std::copy(v.begin(), v.end(),
std::ostream_iterator<double>(std::cout, " -- "));
...

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>



Avatar
Fabien LE LEZ
On Wed, 3 Mar 2004 18:03:28 +0100, "Didier" wrote:

je débute en C++ et C tout court d'ailleur;


Je rappelle que le C++ et le C sont deux langages différents. C'est un
peu comme si tu disais "Je débute en Basic et en Java tout court
d'ailleurs"...

--
;-)

Avatar
Alain Naigeon
"Fabien LE LEZ" a écrit dans le message news:

On Wed, 3 Mar 2004 18:03:28 +0100, "Didier" wrote:

je débute en C++ et C tout court d'ailleur;


Je rappelle que le C++ et le C sont deux langages différents.


Hum, finalement oui, mais le nom et la volonté de compatibilité
suscitent la confusion chez les nouveaux arrivants !

C'est un
peu comme si tu disais "Je débute en Basic et en Java tout court
d'ailleurs"...


J'aurais tout de même inversé, à moins que tu ne considère Basic
comme une large extension de Java ? ;-)

--


Avatar
Fabien LE LEZ
On Wed, 3 Mar 2004 23:37:35 +0100, "Alain Naigeon"
wrote:

Je rappelle que le C++ et le C sont deux langages différents.


Hum, finalement oui, mais le nom et la volonté de compatibilité
suscitent la confusion chez les nouveaux arrivants !


C'est pour ça que je préfère que ce soit clair tout de suite, quitte à
enfoncer des portes ouvertes.

à moins que tu ne considère Basic
comme une large extension de Java ?


A priori, non, pour des raisons historiques (Basic est antérieur).

Mais je ne souhaite pas non plus considérer C++ comme une large
extension de C, du moins quand je programme (et surtout quand je parle
à un débutant).

--
;-)


Avatar
Didier
"Luc Hermitte" a écrit dans le message de
news:
Salut,

"Didier" wrote in
news:c25353$lg4$:

s1 = "titi tutu tototo"
s2 = "titi tutu toto"
s3 = "titi tutu toto " (un espace à la fin)

je recherche la chaine "toto" exclusivement,
comment faut-il faire ?
dans s1 il y a bient tototo, mais c'est toto que je cherche, s1 pas
ok, s2 et s3 ok


A coup de find (méthode de std::string) plus tests de présence d'espaces
on doit pouvoir s'en sortir.
Il est aussi possible de mettre la mettre dans un istringstream,
d'extraire chaque morceau et comparer avec ce qui est recherché.
Personnellement, j'opterai plutôt pour la solution des expressions
régulières (boost::regex (http://www.boost.org) -- un chouilla complexe à
installer pour un débutant peut-être, mais au final un code plus succinct
je trouve).

ma deuxième question :

comment faire pour intégrer une chaine dans un tableau ou un vector,
exemple : s1 = "25.33 17.34 67.00" les valeurs sont séparée pas des
espaces, je voudrait que chaque valeur devienne l'élément d'un
tableau.


#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <string>


...{
const std::string s1 = "25.33 17.34 67.00";
std::istringstream iss(s1);

// On rempli le vecteur de doubles
std::vector<double> v;
std::copy(std::istream_iterator(iss), std::istream_iterator(),
std::back_inserter(v));

// On affiche le vecteur de doubles:
std::copy(v.begin(), v.end(),
std::ostream_iterator<double>(std::cout, " -- "));
...





J'ai testé et c'est génial, j'ai juste dû rajouter le type aux itérators.
std::copy(std::istream_iterator<double>(iss),
std::istream_iterator<double>(), std::back_inserter(v));

encore merci

didier







--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>