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
12
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
2
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
12
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
2
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
12
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
2
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
12
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
2
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
1
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
1
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
12
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
12
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