Pb de conversion int -> string [Résolu]

Signaler
Messages postés
2
Date d'inscription
vendredi 9 juillet 2004
Statut
Membre
Dernière intervention
12 juillet 2004
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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"
Messages postés
2
Date d'inscription
vendredi 9 juillet 2004
Statut
Membre
Dernière intervention
12 juillet 2004

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 ---
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Pkoi ne travaille tu pas avec des char * directement ? Tu es obligé de passer par un string (que jne connias pas d'ailleurs...) ?
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

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-)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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"
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ou utilise sprintf en c standard

sprintf( chaine, "%d", entier);
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ou utilise sprintf en c
sprintf( chaine, "%d", entier);
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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 !) ?!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est lui qui a dit qu'il voulait un string...
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
ok, je pensais ke tu preconisais l'emploi de string a la place de simple char*.

++

Alhexman
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
en voyant son code j'ai bien cru que c'etait du c
tu remplace string par char [200] et ca y est
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
et puis dateok = "L"; -> strcpy(dateok, "L");
Messages postés
688
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
19 mai 2005

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-)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
c lourd un strcpy pour un seul caractere :

*dateok = 'L':

Beaucoup mieux !

++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
et *(dateok +1) = '\0';
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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++
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Ou inversement :

itoa(...)

@+
Arnotic,
Admin CS, MVP Visual C++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Plus rapide, peut-être, mais plus propre je vois pas pourquoi...
D'autant que itoa n'est pas standard
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je retire la dernière phrase
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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