 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Fabien SK Guest
|
Posted: Mon Aug 11, 2003 8:59 am Post subject: Lecture depuis une chaine |
|
|
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
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Wed Aug 13, 2003 2:19 am Post subject: Re: Lecture depuis une chaine |
|
|
Dans news:3f375b19$0$26847$626a54ce (AT) news (DOT) free.fr, Fabien
SK <fabsk+news (AT) free (DOT) fr> a écrit :
| Quote: | 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 [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Fabien SK Guest
|
Posted: Wed Aug 13, 2003 7:35 am Post subject: Re: Lecture depuis une chaine |
|
|
Michel Michaud wrote:
| Quote: | Dans news:3f375b19$0$26847$626a54ce (AT) news (DOT) free.fr, Fabien
SK <fabsk+news (AT) free (DOT) fr> a écrit :
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
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|