OVH Cloud OVH Cloud

Chaines de caractère

5 réponses
Avatar
Nicolas Haller
Bonjour,

J'ai un petit soucis avec un problème qui doit être classique. Je dois
stocker une phrase qui est entré par l'utilisateur dans la console. La
chaine est stocké dans un objet de type string.

J'utilise pour l'instant

std::string robert;
std::cin >> robert;

Mais la lecture s'arrête dès le première espace. Est-ce qu'il y a moyen
de contourner ce problème proprement en gardant la classe string?

Merci

Nicolas Haller

5 réponses

Avatar
Jean-Marc Bourguet
Nicolas Haller writes:

Bonjour,

J'ai un petit soucis avec un problème qui doit être classique. Je dois
stocker une phrase qui est entré par l'utilisateur dans la console. La
chaine est stocké dans un objet de type string.

J'utilise pour l'instant

std::string robert;
std::cin >> robert;

Mais la lecture s'arrête dès le première espace. Est-ce qu'il y a moyen
de contourner ce problème proprement en gardant la classe string?


std::getline(std::cin, robert)

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Patrick Mézard
Nicolas Haller wrote:
Bonjour,

J'ai un petit soucis avec un problème qui doit être classique. Je dois
stocker une phrase qui est entré par l'utilisateur dans la console. La
chaine est stocké dans un objet de type string.

J'utilise pour l'instant

std::string robert;
std::cin >> robert;

Mais la lecture s'arrête dès le première espace. Est-ce qu'il y a moyen
de contourner ce problème proprement en gardant la classe string?

Merci

Nicolas Haller


Utilise std::getline.

///
std::string robert;
std::getline(std::cin, robert);
///

Patrick Mézard

Avatar
Nicolas Haller
Le 11-11-2004, Jean-Marc Bourguet a écrit :
Nicolas Haller writes:
std::string robert;
std::cin >> robert;

Mais la lecture s'arrête dès le première espace. Est-ce qu'il y a moyen
de contourner ce problème proprement en gardant la classe string?


std::getline(std::cin, robert)


Cool, merci bien.

A bientôt

Nicolas Haller


Avatar
Alexandre
bonjour,

std::string robert;
std::cin >> robert;

Mais la lecture s'arrête dès le première espace. Est-ce qu'il y a moyen
de contourner ce problème proprement en gardant la classe string?


il ne faut pas utiliser l'opérateur >> car il s'arrete sur espace, tab et
return.
A la place il faut utiliser istream::getline, mais getline attend un char*
et une taille de buffer.... donc pas une string...
Une solution (pas très bonne mais bon)

const int TailleMaxi = 256;
char *buffer;
buffer = new char[TailleMaxi+1];
std::cin.getline(buffer,TailleMaxi);
std::string robert = buffer;
delete buffer;



Merci

Nicolas Haller


Avatar
Jean-Marc Bourguet
"Alexandre" writes:

bonjour,

std::string robert;
std::cin >> robert;

Mais la lecture s'arrête dès le première espace. Est-ce qu'il y a moyen
de contourner ce problème proprement en gardant la classe string?


il ne faut pas utiliser l'opérateur >> car il s'arrete sur
espace, tab et return. A la place il faut utiliser
istream::getline, mais getline attend un char* et une
taille de buffer.... donc pas une string...


A nouveau
std::getline
A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org