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

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Guillaume LEMAÎTRE
Le #168503
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

Didier
Le #168502
"Guillaume LEMAÎTRE" 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


Luc Hermitte
Le #168405
Salut,

"Didier" 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 FAQ de Dejanews :
Guillaume LEMAÎTRE
Le #168404
Didier wrote:
"Guillaume LEMAÎTRE" 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"


Didier
Le #168403
Merci pour votre aide, je vai essayer tout çà


Didier



"Luc Hermitte" news:
Salut,

"Didier" 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 FAQ de Dejanews :


Fabien LE LEZ
Le #168401
On Wed, 3 Mar 2004 18:03:28 +0100, "Didier"
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"...

--
;-)

Alain Naigeon
Le #170070
"Fabien LE LEZ"
On Wed, 3 Mar 2004 18:03:28 +0100, "Didier"
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 ? ;-)

--


Fabien LE LEZ
Le #170065
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).

--
;-)


Didier
Le #169858
"Luc Hermitte" news:
Salut,

"Didier" 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 FAQ de Dejanews :


Publicité
Poster une réponse
Anonyme