Convertir un int en char ou en string

Signaler
Messages postés
20
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
4 mars 2003
-
Messages postés
24
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
24 juillet 2005
-
Bonjour je voudrai savoir comment on peut faire en c++ pour convertir un int en char ou bien en string la fonction itoa ne marche pas
merci

11 réponses

Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
bonjour,
la fonction itoa fonctionne correctement, mais est un peu trop orientée 'C'
voici ce que je te propose, l'utilisation du "stringstream"
a toi d'y mettre les types que tu désire (ici un int et un float)

#include <sstream>
#include
int main()
{
using namespace std;
string s = "chaine";
int i=0;
float f = 2.01F;
stringstream buffer;
buffer << s << " " << i << " " << f ;
//conversion nécessaire pour affichage
cout << buffer.str() << endl;
return 0;
}
Messages postés
2
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
24 février 2003

Bonjour,

Pour transformer un int en char a la main :
Décomposer le nb en milliers , centaines , dizaines ...
Connaitre la valeur de 0 et de 9 ( en ascii 48 et 57)
Allouer la mémoire pour la chaine
et grace a la valeur ascii on peut remplire la chaine
(48 + nbaconvertir)

voilà

au revoir

May the force be with you 8-)
Messages postés
20
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
4 mars 2003

je n'arrive pas avec la solution que tu m'as donné. Par contre je peux peut être expliquer mieux ce que je souhaite faire.
en fait g un text box je recupère la valeurs qu'il y a dedans pus je l'additionne ensuite je veux faire apparaitre le resultat dedans mais il me faut convertir mon type int en string ou en char.
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
re,
peut être te contenterais tu du bon vieux sprintf de <stdio.h>

//utilisation de sprintf
int i=1234;int j=11111;
char buf[10];//récepteur assez large
sprintf(buf, "%d", (i+j));//et buf contient le texte
printf("%s\n",buf);

Messages postés
20
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
4 mars 2003

g encore un souci lorsque je genere ma solution je n'ai pas d'erreur par contre lorsque j'execute le programme et que je clique sur le bouton qui genere le code, g ce message qui apparait:
Debug Assertion Failed
File sprintf.c
Expression: string!=NULL
For information on how your program can cause an assertion failure, see the visual C++ document on asserts.
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
un comportement différent en Debug et en Release !
Peut être une variable non initialisée
Donne nous un peu de ton
code
Messages postés
20
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
4 mars 2003

tu veux tous le code?
Messages postés
20
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
4 mars 2003

g coupé certaine partie par [...] etant les meme

// Il s'agit du fichier projet principal pour le projet d'application VC++
// généré en utilisant un Assistant Application.

#include "stdafx.h"
#include <stdio.h>
#include
#include <sstream>
#include <stdlib.h>
#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

#include <tchar.h>
using namespace std;
using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::Drawing::Text;

__gc public class CalForm:public Form
{
private:
Button* Btn1;
Button* Btn2;
Button* Btn3;
Button* Btn4;
Button* Btn5;
Button* Btn6;
Button* Btn7;
Button* Btn8;
Button* Btn9;
Button* Btn0;
Button* Btnp;
Button* Btnm;
Button* Btnmult;
Button* Btneg;
Button* BtnOn;
TextBox*text1;
int a;
int b;
int res;
char* var;

public:
CalForm()
{
// Titre de l'application

Text= S"Calculatrice";
Size = System::Drawing::Size(450,300);
BackColor = Color::PowderBlue;

//Fixe les bords
FormBorderStyle = FormBorderStyle::Sizable;

// Insere le bouton 1
Setup_Button1();

//Bouton 2
Setup_Button2();
//Bouton 3
Setup_Button3();
[...]

///Boutton +
Setup_Buttonp();
//Bouton -
Setup_Buttonm();
//Bouton *
Setup_Buttonmult();
//Bouton On
Setup_ButtonOn();
//Affichage du resultat
Setup_Text();
//Egale
Setup_Buttoneg();
}
private:
void Setup_Button1()
{
Btn1=new Button();
Btn1->Text= S"1";
Btn1->Font=new System::Drawing::Font(S"Comic", 12,FontStyle::Regular);
Btn1->Size=System::Drawing::Size(30,30);
Btn1->Location= Point(100,100);

Controls->Add(Btn1);
Btn1->Click += new EventHandler(this, &CalForm::Button_Clicked);

}

[...]
void Setup_Button0()
{
Btn0=new Button();
Btn0->Text= S"0";
Btn0->Font=new System::Drawing::Font(S"Comic", 12,FontStyle::Regular);
Btn0->Size=System::Drawing::Size(30,30);
Btn0->Location= Point(100,190);
Controls->Add(Btn0);
Btn0->Click += new EventHandler(this, &CalForm::Button_Clicked);

}

void Setup_ButtonOn()
{
BtnOn=new Button();
BtnOn->Text= S"On";
BtnOn->Font=new System::Drawing::Font(S"Comic", 12,FontStyle::Regular);
BtnOn->Size=System::Drawing::Size(50,30);
BtnOn->Location= Point(50,100);
Controls->Add(BtnOn);
BtnOn->Click += new EventHandler(this, &CalForm::Button_Clicked);

}

void Setup_Buttonp()
{
Btnp=new Button();
Btnp->Text= S"+";
Btnp->Font=new System::Drawing::Font(S"Comic", 14,FontStyle::Regular);
Btnp->Size=System::Drawing::Size(30,30);
Btnp->Location= Point(200,100);
Controls->Add(Btnp);
Btnp->Click += new EventHandler(this, &CalForm::Button_Clicked2);

}
void Setup_Buttonm()
{
Btnm=new Button();
Btnm->Text= S"-";
Btnm->Font=new System::Drawing::Font(S"Comic", 14,FontStyle::Regular);
Btnm->Size=System::Drawing::Size(30,30);
Btnm->Location= Point(230,100);
Controls->Add(Btnm);
}

void Setup_Buttonmult()
{
Btnmult=new Button();
Btnmult->Text= S"x";
Btnmult->Font=new System::Drawing::Font(S"Comic", 14,FontStyle::Regular);
Btnmult->Size=System::Drawing::Size(30,30);
Btnmult->Location= Point(200,130);
Controls->Add(Btnmult);
}

void Setup_Buttoneg()
{
Btneg=new Button();
Btneg->Text= S"=";
Btneg->Font=new System::Drawing::Font(S"Comic", 14,FontStyle::Regular);
Btneg->Size=System::Drawing::Size(30,30);
Btneg->Location= Point(200,160);
Controls->Add(Btneg);
Btneg->Click += new EventHandler(this, &CalForm::Button_Clicked3);

}

void Setup_Text()
{
text1=new TextBox();
text1->Location=Point(100,50);
text1->Size=System::Drawing::Size(200);
text1->Multiline=false;
Controls->Add(text1);
}
void Button_Clicked(Object* pSender,EventArgs* pArgs)
{

//a =0;

if (pSender == Btn1)
// Envoie 1 dans le text box
{
text1->AppendText("1");
a=1;
}

else if (pSender ==Btn2)
{
text1->AppendText("2");
a=2;

}
else if (pSender == Btn3)
{
text1->AppendText("3");
a=3;

}

else if (pSender== Btn4)
{
text1->AppendText("4");
a=4;

}
else if (pSender == Btn5)
{
text1->AppendText("5");
a=5;

}
else if (pSender == Btn6)
{
text1->AppendText("6");
a=6;
}
else if (pSender == Btn7)
text1->AppendText("7");
else if (pSender == Btn8)
text1->AppendText("8");
else if (pSender == Btn9)
text1->AppendText("9");
else if (pSender == Btn0)
text1->AppendText("0");
else if (pSender == BtnOn)
text1->Clear();
}
void Button_Clicked2(Object* pSender,EventArgs* pArgs)
{

if (pSender = Btnp)
{
b=a;
text1->Clear();
}
}
void Button_Clicked3(Object* pSender,EventArgs* pArgs)

{
int i=res;

if (pSender == Btneg)
{
res=addition(a,b);
sprintf(var,"%d",res);
text1->AppendText(var);
}

}

int addition(int a,int b)
{
int res;
res = a+b;
return(res);
}

};

// Il s'agit du point d'entrée pour cette application
int _tmain(void)
{
Application::Run(new CalForm());
return 0;
}
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
non, juste la déclaration de ta chaîne de caractère
et la façon dont tu la valorise
peut être aussi la libération
Messages postés
8
Date d'inscription
mardi 1 juillet 2003
Statut
Membre
Dernière intervention
23 mai 2007

Tiens voila une fonction bien pratique utilisant les flux et template

template <class OUT, class IN>
OUT Convert(const IN & t)
{
//variable de sortie de type OUT
OUT tmp;
//declaration du flux
stringstream Flux;
//copie de l'entree dans le flux
Flux << t;
//copie du flux dans sortie
Flux >> tmp;

return tmp;
}


tu l'appelle en faisant : (tu peut meme faire un string->int)

int a=12456;
string s="1354";

s=Convert<string>(a);

a=Convert(s);


Filipuce - Si ce que tu as à dire n'est pas plus beau que le silence alors tais-toi
Messages postés
24
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
24 juillet 2005

je vois pas ce que ce code apporte


si on met

> cout << s << " " << i << " " << f ;

au lieu de

> cout << buffer.str() << endl;



ca marche pareil ?!

Où est l'intérêt ?



En tout cas, je n'arrive pas à le mettre en application dans ce code :



unsigned short pause;

cin >> pause;



system("import -pause " << pause << "blabla";



j'ai apparemment besoin de convertir la variable pause en string pour la passer dans system().

comment faire ?


-------------------------------

Réponse au message :

-------------------------------



> bonjour,

> la fonction itoa fonctionne correctement, mais est un peu trop orientée 'C'

> voici ce que je te propose, l'utilisation du "stringstream"

> a toi d'y mettre les types que tu désire (ici un int et un float)

>

> #include <sstream>

> #include

> int main()

> {

> using namespace std;

> string s = "chaine";

> int i=0;

> float f = 2.01F;

> stringstream buffer;

> buffer << s << " " << i << " " << f ;

> //conversion nécessaire pour affichage

> cout << buffer.str() << endl;

> return 0;

> }