Borland avec BCB a introduit la fonction sprintf dans sa
classe AnsiString. Par ex :
AnsiString asTmp;
asTmp.sprintf("la valeur hexa de l'entier i est %#X\n",i);
On peut aussi enlever les espaces en début et fin avec
asTmp = asTmp.Trim();
On peut aussi changer la casse de la chaîne avec :
asTmp = asTmp.Lowercase();
asTmp = asTmp.Uppercase();
D'après ce lien :
http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#1
M$ aurait aussi introduit ces fonctions.
Il me semble que Borland l'a fait avant M$.
Dans tous les cas, il me semble que la solution proposée dans ce
lien pour pallier le manque de sprintf dans la classe string est
lourde et incomplète. N'est-il pas ?
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
Loïc Joly
eric.bart wrote:
Borland avec BCB a introduit la fonction sprintf dans sa classe AnsiString. Par ex :
AnsiString asTmp; asTmp.sprintf("la valeur hexa de l'entier i est %#Xn",i);
[...]
D'après ce lien : http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#1 M$ aurait aussi introduit ces fonctions.
Il me semble que Borland l'a fait avant M$.
Dans tous les cas, il me semble que la solution proposée dans ce lien pour pallier le manque de sprintf dans la classe string est lourde et incomplète. N'est-il pas ?
Ca doit dépendre des goûts. Personellement, je ne ressent pas le moindre manque en ne voyant pas de sprintf dans les strings. A la limite si la chaîne de format de sprintf permettait les arguments positionnels, pourquoi pas, pour l'internationnalisation. Mais en tant que telle, bof... D'autres (plein, même, peut être des gens ayant commencé en C et donc sachant lire une telle chaîne de format ?) ne sont pas de cet avis.
Il y a par exemple boost::format http://www.boost.org/libs/format/index.htm ou encore gbFormat http://www.gabi-soft.fr/code/Util/IO/Format/ qui présentent a priori un avantage certain sur l'ansiString que tu présentes : Il n'y a pas de fonctions à arguments variables appelées.
-- Loïc
eric.bart wrote:
Borland avec BCB a introduit la fonction sprintf dans sa
classe AnsiString. Par ex :
AnsiString asTmp;
asTmp.sprintf("la valeur hexa de l'entier i est %#Xn",i);
[...]
D'après ce lien :
http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#1
M$ aurait aussi introduit ces fonctions.
Il me semble que Borland l'a fait avant M$.
Dans tous les cas, il me semble que la solution proposée dans ce
lien pour pallier le manque de sprintf dans la classe string est
lourde et incomplète. N'est-il pas ?
Ca doit dépendre des goûts. Personellement, je ne ressent pas le moindre
manque en ne voyant pas de sprintf dans les strings. A la limite si la
chaîne de format de sprintf permettait les arguments positionnels,
pourquoi pas, pour l'internationnalisation. Mais en tant que telle,
bof... D'autres (plein, même, peut être des gens ayant commencé en C et
donc sachant lire une telle chaîne de format ?) ne sont pas de cet avis.
Il y a par exemple boost::format
http://www.boost.org/libs/format/index.htm ou encore gbFormat
http://www.gabi-soft.fr/code/Util/IO/Format/ qui présentent a priori un
avantage certain sur l'ansiString que tu présentes : Il n'y a pas de
fonctions à arguments variables appelées.
Borland avec BCB a introduit la fonction sprintf dans sa classe AnsiString. Par ex :
AnsiString asTmp; asTmp.sprintf("la valeur hexa de l'entier i est %#Xn",i);
[...]
D'après ce lien : http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#1 M$ aurait aussi introduit ces fonctions.
Il me semble que Borland l'a fait avant M$.
Dans tous les cas, il me semble que la solution proposée dans ce lien pour pallier le manque de sprintf dans la classe string est lourde et incomplète. N'est-il pas ?
Ca doit dépendre des goûts. Personellement, je ne ressent pas le moindre manque en ne voyant pas de sprintf dans les strings. A la limite si la chaîne de format de sprintf permettait les arguments positionnels, pourquoi pas, pour l'internationnalisation. Mais en tant que telle, bof... D'autres (plein, même, peut être des gens ayant commencé en C et donc sachant lire une telle chaîne de format ?) ne sont pas de cet avis.
Il y a par exemple boost::format http://www.boost.org/libs/format/index.htm ou encore gbFormat http://www.gabi-soft.fr/code/Util/IO/Format/ qui présentent a priori un avantage certain sur l'ansiString que tu présentes : Il n'y a pas de fonctions à arguments variables appelées.
-- Loïc
Fabien LE LEZ
On Sun, 19 Oct 2003 13:26:36 +0200, "eric.bart" wrote:
il me semble que la solution proposée dans ce lien pour pallier le manque de sprintf dans la classe string est lourde et incomplète.
Le problème avec sprintf, c'est que tu obtiens facilement des bugs bizarres et difficiles à cerner. Du style :
char const* ch1; char const* ch2; int i; ... sprintf (..., "%s %s", ch1, i, ch2); // (1)
Pour le compilateur, la ligne (1) est parfaitement valide ; c'est à l'exécution qu'on va avoir des problèmes. La solution avec les *stream est certes plus lourde à écrire, mais tellement plus facile à déboguer...
On Sun, 19 Oct 2003 13:26:36 +0200, "eric.bart"
<eric.bart@wanadoo-tralala.fr> wrote:
il me semble que la solution proposée dans ce
lien pour pallier le manque de sprintf dans la classe string est
lourde et incomplète.
Le problème avec sprintf, c'est que tu obtiens facilement des bugs
bizarres et difficiles à cerner. Du style :
char const* ch1;
char const* ch2;
int i;
...
sprintf (..., "%s %s", ch1, i, ch2); // (1)
Pour le compilateur, la ligne (1) est parfaitement valide ; c'est à
l'exécution qu'on va avoir des problèmes.
La solution avec les *stream est certes plus lourde à écrire, mais
tellement plus facile à déboguer...
On Sun, 19 Oct 2003 13:26:36 +0200, "eric.bart" wrote:
il me semble que la solution proposée dans ce lien pour pallier le manque de sprintf dans la classe string est lourde et incomplète.
Le problème avec sprintf, c'est que tu obtiens facilement des bugs bizarres et difficiles à cerner. Du style :
char const* ch1; char const* ch2; int i; ... sprintf (..., "%s %s", ch1, i, ch2); // (1)
Pour le compilateur, la ligne (1) est parfaitement valide ; c'est à l'exécution qu'on va avoir des problèmes. La solution avec les *stream est certes plus lourde à écrire, mais tellement plus facile à déboguer...
On Sun, 19 Oct 2003 13:26:36 +0200, "eric.bart" wrote:
il me semble que la solution proposée dans ce lien pour pallier le manque de sprintf dans la classe string est lourde et incomplète.
Le problème avec sprintf, c'est que tu obtiens facilement des bugs bizarres et difficiles à cerner. Du style :
char const* ch1; char const* ch2; int i; ... sprintf (..., "%s %s", ch1, i, ch2); // (1)
Pour le compilateur, la ligne (1) est parfaitement valide ; c'est à l'exécution qu'on va avoir des problèmes. La solution avec les *stream est certes plus lourde à écrire, mais tellement plus facile à déboguer...
Oui, mais aussi embêtante quand on veut faire du formattage dynamique. Et la c'est vrai que printf et ses dérivés reste imbattable. Donc, ben, ca dépend de l'usage que l'on souhaite en faire.
Bruno
Fabien LE LEZ wrote:
On Sun, 19 Oct 2003 13:26:36 +0200, "eric.bart"
<eric.bart@wanadoo-tralala.fr> wrote:
il me semble que la solution proposée dans ce
lien pour pallier le manque de sprintf dans la classe string est
lourde et incomplète.
Le problème avec sprintf, c'est que tu obtiens facilement des bugs
bizarres et difficiles à cerner. Du style :
char const* ch1;
char const* ch2;
int i;
...
sprintf (..., "%s %s", ch1, i, ch2); // (1)
Pour le compilateur, la ligne (1) est parfaitement valide ; c'est à
l'exécution qu'on va avoir des problèmes.
La solution avec les *stream est certes plus lourde à écrire, mais
tellement plus facile à déboguer...
Oui, mais aussi embêtante quand on veut faire du formattage dynamique.
Et la c'est vrai que printf et ses dérivés reste imbattable. Donc, ben,
ca dépend de l'usage que l'on souhaite en faire.
On Sun, 19 Oct 2003 13:26:36 +0200, "eric.bart" wrote:
il me semble que la solution proposée dans ce lien pour pallier le manque de sprintf dans la classe string est lourde et incomplète.
Le problème avec sprintf, c'est que tu obtiens facilement des bugs bizarres et difficiles à cerner. Du style :
char const* ch1; char const* ch2; int i; ... sprintf (..., "%s %s", ch1, i, ch2); // (1)
Pour le compilateur, la ligne (1) est parfaitement valide ; c'est à l'exécution qu'on va avoir des problèmes. La solution avec les *stream est certes plus lourde à écrire, mais tellement plus facile à déboguer...
Oui, mais aussi embêtante quand on veut faire du formattage dynamique. Et la c'est vrai que printf et ses dérivés reste imbattable. Donc, ben, ca dépend de l'usage que l'on souhaite en faire.
Bruno
Christophe Lephay
Bruno Personnel wrote:
Fabien LE LEZ wrote:
La solution avec les *stream est certes plus lourde à écrire, mais tellement plus facile à déboguer... Oui, mais aussi embêtante quand on veut faire du formattage dynamique.
Et la c'est vrai que printf et ses dérivés reste imbattable. Donc, ben, ca dépend de l'usage que l'on souhaite en faire.
Il faudrait préciser ce que tu entends par "formatage dynamique", parce que les flux permettent bel et bien un formatage dynamique (via un appel de fonction virtuelle)...
Chris
Bruno Personnel wrote:
Fabien LE LEZ wrote:
La solution avec les *stream est certes plus lourde à écrire, mais
tellement plus facile à déboguer...
Oui, mais aussi embêtante quand on veut faire du formattage dynamique.
Et la c'est vrai que printf et ses dérivés reste imbattable. Donc,
ben, ca dépend de l'usage que l'on souhaite en faire.
Il faudrait préciser ce que tu entends par "formatage dynamique", parce que
les flux permettent bel et bien un formatage dynamique (via un appel de
fonction virtuelle)...
La solution avec les *stream est certes plus lourde à écrire, mais tellement plus facile à déboguer... Oui, mais aussi embêtante quand on veut faire du formattage dynamique.
Et la c'est vrai que printf et ses dérivés reste imbattable. Donc, ben, ca dépend de l'usage que l'on souhaite en faire.
Il faudrait préciser ce que tu entends par "formatage dynamique", parce que les flux permettent bel et bien un formatage dynamique (via un appel de fonction virtuelle)...