PDA

View Full Version : سوال: الحاق یک رشته و یک عدد به یکدیگر



حمید . ه
جمعه 03 آبان 1392, 10:18 صبح
سلام .
من یه برنامه ساده تبدیل عدد از مبنای 10 به 2 دارم مینویسم .
مشکلی دارم اینه که نمیدونم چطور متغیر t رو به کاراکتر تبدیل کنم و کنار متغیر s اضافه کنم .
#include <iostream.h>;
#include <math.h>;
#include <cstring>;
#include <conio.h>;
class BinToDec
{
long int n;
wchar_t s;
int t;
public:
void initialize();
void insert();
void process();
void show();
};
void BinToDec::initialize()
{
n=0;
s=' ';
t=0;
}
void BinToDec::insert()
{
cout<<"Please insert decimal number :";
cin>>n;
}
void BinToDec::process()
{
while(n!=0)
{
t=n%2;
s=(char)t+s;
n=n/2;
}
}
void BinToDec::show()
{
cout<<"\nBinary is :"<<s;
}

void main()
{
BinToDec btTest;
btTest.initialize();
btTest.insert();
btTest.process();
btTest.show();
getch();
}

Ananas
جمعه 03 آبان 1392, 11:26 صبح
سلام.
ازین دوتا نمونه کمک بگیر :

wchar_t * MQInt64ToWideChar(__int64 i64, wchar_t * wc, int radix = 10)
{
const wchar_t * DIGITS_1TOF = L"0123456789ABCDEF";
if (i64 == 0)
{
wc[0] = L'0';
wc[1] = wchar_t(0);
return wc;
};
int index = 0;
wchar_t invStr[256];
__int64 i64_ = i64;
if (i64_ < 0)
i64_ = -i64_;
__int64 remainder;
while (i64_ > 0)
{
remainder = i64_ % radix;
invStr[255 - index] = DIGITS_1TOF[remainder];// + wchar_t(L'0');
i64_ /= radix;
index++;
};
if (i64 < 0)
{
invStr[255 - index] = wchar_t(L'-');
index++;
};
memcpy(wc, &(invStr[256 - index]), sizeof(wchar_t) * index);
wc[index] = wchar_t(0);
return wc;
}
wchar_t * MQUInt64ToWideChar(unsigned __int64 ui64, wchar_t * wc, int radix = 16)
{
#define DIGITS_1TOF L"0123456789ABCDEF"
if (ui64 == 0)
{
wc[0] = L'0';
wc[1] = wchar_t(0);
return wc;
};
int index = 0;
wchar_t invStr[256];
unsigned __int64 ui64_ = ui64;
unsigned __int64 remainder;
while (ui64_ > 0)
{
remainder = ui64_ % radix;
invStr[255 - index] = DIGITS_1TOF[remainder];// + wchar_t(L'0');
ui64_ /= radix;
index++;
};
memcpy(wc, &(invStr[256 - index]), sizeof(wchar_t) * index);
wc[index] = wchar_t(0);
return wc;
};

حمید . ه
جمعه 03 آبان 1392, 11:30 صبح
ممنون ولی من فقط میخوام بدونم زبان c++ تابعی چیزی نداره که بشه ازش استفاده کرد ؟ مثل cstr داخل vb

مصطفی ساتکی
جمعه 03 آبان 1392, 11:50 صبح
چرا wchar_t استفاده کردید خوب می تونید string استفاده کنید.
برای اینکه بی درسر باشید تو C++ از stringstream استفاده کنید و در نهایت با متد str آن رشته حاصله را دریافت کنید.

stringstream ss;
ss << 1;
string res = ss.str();

حمید . ه
جمعه 03 آبان 1392, 11:52 صبح
header file نیاز داره ؟

Ananas
جمعه 03 آبان 1392, 12:22 عصر
_i64toa()
_i64tow()
_atoi64()
_wtoi64()

حمید . ه
جمعه 03 آبان 1392, 13:13 عصر
دوستان خواهش میکنم یکی به من یک جواب واضح بده :ناراحت:
من تازه c++ شروع کردم چیز زیادی نمیدونم ازش :گریه:

مصطفی ساتکی
جمعه 03 آبان 1392, 13:33 عصر
#include <sstream>
#include<string>
using namespace std;

حمید . ه
جمعه 03 آبان 1392, 13:43 عصر
آقا چرا فایل sstream رو نمیتونه باز کنه ؟ Unable to open include file 'sstream میده :(

omidshaman
جمعه 03 آبان 1392, 14:50 عصر
چه کامپایلری استفاده می کنی ؟

حمید . ه
جمعه 03 آبان 1392, 17:18 عصر
borland c++

حمید . ه
جمعه 03 آبان 1392, 17:54 عصر
آقا اون مشکل حل شد . به جای sstream نوشتم strstream درست شد . ولی الان مشکل جدید این اروره Qualifier 'traits_type' is not a class or namespace name

مصطفی ساتکی
جمعه 03 آبان 1392, 17:56 عصر
اگر اینطوری از آرایه استاتیک استفاده کنید بدین صورت.

char str[100] = "test";
sprintf(str,"%s%d",str,1);
sprintf(str,"%s%d",str,2);

مصطفی ساتکی
جمعه 03 آبان 1392, 17:57 عصر
borland c++

اگر اینطوری از آرایه استاتیک استفاده کنید بدین صورت.

char str[100] = "test";
sprintf(str,"%s%d",str,1);
sprintf(str,"%s%d",str,2);

حمید . ه
جمعه 03 آبان 1392, 18:00 عصر
آقای ساتکی ممنون ولی تعریف آرایه اینجا غیر منطقی نیست ؟

مصطفی ساتکی
جمعه 03 آبان 1392, 18:03 عصر
آقای ساتکی ممنون ولی تعریف آرایه اینجا غیر منطقی نیست ؟
می تونید دینامیک هم استفاده کنید با استفاده از دستور malloc . منظورم این بود که اگر از Borland c++ استفاده می کنید دیگه دنبال stringstream نباشید از طریق ansi c کارهاتونو انجام بدید.

حمید . ه
جمعه 03 آبان 1392, 18:07 عصر
من از شما ممنونم ولی بازهم ذکر میکنم من آشنایی چندانی با c++ ندارم و شما تخصصی صحبت میکنید و من متوجه نمیشوم :افسرده:

omidshaman
جمعه 03 آبان 1392, 18:36 عصر
از یک کامپایلر بروز تر استفاده کن مثل visual studio یا code blocks ,...
می تونی خودت دستی تبدیل کنی به این شکل مثلا :
#include <iostream>
#include <algorithm>
using namespace std;
void appendIntegerToString(string &str,int number)
{
int fPos=str.size();
if(number<0)
{
fPos++;
str += '-';
number *= -1;
}
int lPos=fPos;
while(number!=0)
{
lPos++;
str+=(number%10)+'0';
number/=10;
}

reverse(str.begin()+fPos,str.begin()+lPos);
}
int main()
{
string str;
appendIntegerToString(str,-1234);
cout<<str;
}

Ananas
جمعه 03 آبان 1392, 19:01 عصر
#include <iostream.h>;
#include <math.h>;
#include <cstring>;
#include <conio.h>;
class BinToDec
{
__int64 i64;
char * str;
public:
BinToDec()
{
i64 = 1L;
str = (char *)malloc(sizeof(char) * 128);
};
~BinToDec() { free(str); };
void insert();
void process();
void show();
__int64 GetI64() {return i64;};
};

void BinToDec::insert()
{
cout<<"Please insert decimal number :";
cin>>i64;
}
void BinToDec::process()
{
_i64toa(i64, str, 2);
}
void BinToDec::show()
{
cout<< "\nBinary is :" << str << endl << endl;
}

void main()
{
BinToDec * btTest = new BinToDec();
while (btTest->GetI64() != 0)
{
btTest->insert();
btTest->process();
btTest->show();
};
delete btTest;
getch();
}