OVH Cloud OVH Cloud

Lecture depuis une chaine

2 réponses
Avatar
Fabien SK
Bonjour,

J'ai une chaine de caractères comme "1234". Je voudrais lire les deux
premiers caractères vers un int, ce que fait très bien:

const char *ptoto = "1234";
int tata;
sscanf(ptoto, "%2d", &tata);

Maintenant est-il possible de faire la même chose à la mode C++ (avec un
"istringstream" par exemple, mais je n'ai pas trouvé comment limiter le
nombre de caractères en entrée pour un champs lu) de manière légère (une
ligne pour le "sscanf").

Fabien

2 réponses

Avatar
Michel Michaud
Dans news:3f375b19$0$26847$, Fabien
Bonjour,

J'ai une chaine de caractères comme "1234". Je voudrais lire les
deux premiers caractères vers un int, ce que fait très bien:

const char *ptoto = "1234";
int tata;
sscanf(ptoto, "%2d", &tata);

Maintenant est-il possible de faire la même chose à la mode C++
(avec un "istringstream" par exemple, mais je n'ai pas trouvé
comment limiter le nombre de caractères en entrée pour un champs
lu) de manière légère (une ligne pour le "sscanf").


Le nombre de lignes est rarement un facteur intéressant. Les
amateurs d'APL te le diraient. Ceci dit, setw() est défini pour
les istream (la norme le dit explicitement) mais ne semble pas
avoir d'effet (la norme dit que width a un effet sur les sorties).
C'est curieux.

J'imagine que ceci ne te plaira pas vraiment :

string toto= "1234";
int tata;

istringstream(toto.substr(0,2)) >> tata; // Une ligne :-)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Fabien SK
Michel Michaud wrote:

Dans news:3f375b19$0$26847$, Fabien

Bonjour,

J'ai une chaine de caractères comme "1234". Je voudrais lire les
deux premiers caractères vers un int, ce que fait très bien:

[...]


J'imagine que ceci ne te plaira pas vraiment :

string toto= "1234";
int tata;

istringstream(toto.substr(0,2)) >> tata; // Une ligne :-)


Eh eh, non. Surtout que si je veux lire plusieurs nombres de suite
(comme dans le code qui suit), ça ne va pas.

sscanf("123456", "%2d%2d%2d", &a, &b, &c);

J'ai cherché sur google, et apparemment je ne suis pas le seul à avoir
ce problème. C'est tout simplement dommage que la méthode "width" des
"istream" ne marche pas pour les nombres entiers, c'est comme ça et tant
pis :-(

Fabien