Pb de conversion int -> string

Résolu
roadbook Messages postés 2 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 12 juillet 2004 - 12 juil. 2004 à 17:36
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 13 juil. 2004 à 09:11
Bonjour à tous,

Problématique : je souhaite décomposer une date pour obtenir une string de la forme LAAAAMM1.txt (AAAA=année et MM = mois) qui me servira plus tard pour indiquer un nom de fichier différent en fonction de la date système.

J'ai réussi a récupérer les différents éléments de la date mais je les récupère sous forme "int", je n'arrive pas à les transformer en string ensuite.

J'utilise itoa pour convertir d'abord en char, ce qui se fait correctement, par contre, je n'arrive pas à faire la transformation char -> string

Il bloque sur la ligne que j'ai indiqué en mettant "impossible de convertir string en char".

voici le bout de code concerné (avec Borland C++ Builder 6) :

int mois;
int annee;
char smois [2];
char sannee [4];
string dateok ;
string moisok;
string anneeok;
SYSTEMTIME sttm;
DWORD date;

GetLocalTime(&sttm);
mois = sttm.wMonth;
mois=mois-1;
annee = sttm.wYear;
itoa (mois, smois,10);
itoa (annee, sannee,10);

dateok = "L";
strcpy (dateok,sannee); // c'est ici que je me fait jeter
strcat (dateok,smois);
strcat (dateok,"1.txt");

Quelqu'un peut-il m'aider ? Merci d'être le plus clair possible car vous l'aurez remarqué, je ne suis pas expert en la matière...

Merci d'avance.

--- RoAdBooK ---

34 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 22:12
Ne les écoute pas; il suffit que utilise un ostringstream:

#include <sstream>
using namespace std;
...
ostringstream ost;int i 2, j 3;
ost << i << j;string s ost.str(); // s "23"
3
roadbook Messages postés 2 Date d'inscription vendredi 9 juillet 2004 Statut Membre Dernière intervention 12 juillet 2004
12 juil. 2004 à 17:44
oups excusez moi j'avais pris un ancien code voici le bon à placer après la déclaratiion des variables :

GetLocalTime(&sttm);
mois = sttm.wMonth;
mois=mois-1;
annee = sttm.wYear;
itoa (mois, smois,10);
itoa (annee, sannee,10);

moisok = smois;
anneeok = sannee;

dateok = "L";
strcat (dateok,anneeok); // <-------------- c'est ici
strcat (dateok,moisok);
strcat (dateok,"1.txt");

PS : en débuggant, moisok et anneeok ont les bonnes valeurs.
--- RoAdBooK ---
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
12 juil. 2004 à 18:41
Pkoi ne travaille tu pas avec des char * directement ? Tu es obligé de passer par un string (que jne connias pas d'ailleurs...) ?
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
12 juil. 2004 à 21:48
ben en ca ou tu penserait a utiliser les char * car c mieux voila
la fonction qui permet de convertir de int to char* :

itoa
Life is Short 8-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 22:12
Ne les écoute pas; il suffit que utilise un ostringstream:

#include <sstream>
using namespace std;
...
ostringstream ost;int i 2, j 3;
ost << i << j;string s ost.str(); // s "23"
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juil. 2004 à 22:18
ou utilise sprintf en c standard

sprintf( chaine, "%d", entier);
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juil. 2004 à 22:19
ou utilise sprintf en c
sprintf( chaine, "%d", entier);
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
12 juil. 2004 à 22:31
vecchio56 > kel est l'interet de passer par un string puis ce qu'il peut se servir de char * (qu'il a en sa possession en plus !) ?!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 22:33
C'est lui qui a dit qu'il voulait un string...
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
12 juil. 2004 à 22:38
ok, je pensais ke tu preconisais l'emploi de string a la place de simple char*.

++

Alhexman
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juil. 2004 à 22:38
en voyant son code j'ai bien cru que c'etait du c
tu remplace string par char [200] et ca y est
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 22:40
et puis dateok = "L"; -> strcpy(dateok, "L");
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
12 juil. 2004 à 22:41
oui est en plus en emploiyent les string tu fera ajouter un ton exe plus de capacité que pour les char*
mais fait ce que tu veut

Life is Short 8-)
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
12 juil. 2004 à 22:42
c lourd un strcpy pour un seul caractere :

*dateok = 'L':

Beaucoup mieux !

++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juil. 2004 à 22:45
et *(dateok +1) = '\0';
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 juil. 2004 à 22:51
Arf,

Un simple

char Toto[] = "4";
int r = atoi(Toto);

Serait tellement plus propre, rapide que c'est string, .... et aussi sprintf !

@+
Arnotic,
Admin CS, MVP Visual C++
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 juil. 2004 à 22:52
Ou inversement :

itoa(...)

@+
Arnotic,
Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 22:57
Plus rapide, peut-être, mais plus propre je vois pas pourquoi...
D'autant que itoa n'est pas standard
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 juil. 2004 à 22:57
Je retire la dernière phrase
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juil. 2004 à 22:58
atoi ok, mais itoa pas encore dans le standard
a par le probleme de perfrmance du au controle d'arg, scanf/sprintf est la solution la plus standard, donc pas jeter a la poubelle
0
Rejoignez-nous