À titre d'exercice, j'essaie de créer un manipulateur de flux d'entrée qui aspire les caractères et les place dans une chaîne jusqu'à ce qu'il rencontre un caractère spécifique ou jusqu'à ce qu'il atteigne l'eof. L'idée est venue de Bruce Eckel de «Penser en C++ page 249.création d'un manipulateur de flux d'entrée
Voici le code que j'ai jusqu'à présent:
#include <string>
#include <iostream>
#include <istream>
#include <sstream>
#include <fstream>
#include <iomanip>
using namespace std;
class siu
{
char T;
string *S;
public:
siu (string *s, char t)
{
T = t;
S = s;
*S = "";
}
friend istream& operator>>(istream& is, siu& SIU)
{
char N;
bool done=false;
while (!done)
{
is >> N;
if ((N == SIU.T) || is.eof())
done = true;
else
SIU.S->append(&N);
}
return is;
}
};
et de le tester ....
{
istringstream iss("1 2 now is the time for all/");
int a,b;
string stuff, zork;
iss >> a >> b >> siu(&stuff,'/');
zork = stuff;
}
l'idée étant que siu (& stuff, '/') va aspirer les caractères de iss jusqu'à ce qu'il rencontre le /. Je peux le regarder avec le débogueur car il obtient les caractères 'n' 'o' 'w' à travers '/' et termine la boucle. Tout semble aller nager jusqu'à ce que je regarde Stuff. Stuff a les caractères maintenant etc MAIS il y a 6 caractères supplémentaires entre chacun d'eux. Voici un exemple:
- & 0x0012fba4 stuff {0x008c1861 "nÌÌÌýoÌÌÌýwÌÌÌýiÌÌÌýsÌÌÌýtÌÌÌýhÌÌÌýeÌÌÌýtÌÌÌýiÌÌÌýmÌÌÌýeÌÌÌýfÌÌÌýoÌÌÌýrÌÌÌýaÌÌÌýlÌÌÌýlÌÌÌý"}
Que se passe-t-il?
Merci! Si proche mais pas de cigare. Je l'ai changé en SIU.S-> append (& N, 1) et puisque je voulais inclure des blancs, j'ai remplacé le est >> N; avec N = is.get(). Semble fonctionner comme j'espérais maintenant. –
encore plus simple: while (est >> n) siu.s + = n; Remarque: les identifiants en majuscules sont - par convention - réservés aux définitions de préprocesseur ... leur utilisation peut conduire à des bogues très difficiles à localiser. (bien que étrangement, ala simple lettre modèle, U etc. est pracice commun) –
@Tony: Rien qui ne commence pas par un trait de soulignement est réservé par la langue pour quoi que ce soit. Tout bon guide de style inclut cette règle, cependant. – Potatoswatter