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").
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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/
Dans news:3f375b19$0$26847$626a54ce@news.free.fr, 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 mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
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/
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
Michel Michaud wrote:
Dans news:3f375b19$0$26847$626a54ce@news.free.fr, 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 :-(
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 :-(