1、C++ string和其他数据类型之间的转换
其他类型转换成string
string to_string(TYPE value);
TYPE 可以是int、double、float、long等类型。
但是要注意:float和double类型会在小数点后不够6位时补零
string 转 其他类型
转int: atoi(str.c_str());
转long:atol(str.c_str());
转float:atof(str.c_str());
int main()
{
// string 转 char*
string str = "454";
const char* ch = str.c_str();
// char* 转 string
char* ch1 = "12345";
char* ch2 = ch1;
string str1(ch2);
// string 转 long
string str3 = "1234567890";
long l = atoi(str3.c_str());
// string 转 int
string str4 = "123";
int i = atoi(str4.c_str());
// string 转 float
string str5 = "123.123";
float f = atof(str5.c_str());
// 数字转string
// 注意:这里转的时候位数不够时会补零。
// 如:12.343 输出为:12.343000
double d = 12.343;
string str6 = to_string(d);
// 数字转string. 其中被转数字d可以是任意数字类型
ostringstream os;
os << d;
string str7;
istringstream is(os.str());
is >> str7;
return 0;
}
2、string的构造函数、拷贝构造函数、=运算符、析构函数
My_string类的原型为:
class My_string
{
public:
// 拷贝构造函数
My_string(const My_string& str);
// 普通构造函数
My_string(const char* str = NULL);
// 重载赋值运算符
My_string& operator = (const My_string& str);
// 析构函数
~My_string();
private:
char* m_pData;
};
编写其构造函数、拷贝构造函数、=运算符、析构函数:
// 拷贝构造函数
My_string::My_string(const My_string& str)
{
// 动态申请内存
int len = strlen(str.m_pData);
m_pData = new char[len+1];
// 判断申请内存是否成功
if(m_pData == NULL)
{
cout << "failed!!!" << endl;
exit(1);
}
strcpy(m_pData, str.m_pData);
}
// 普通构造函数
My_string::My_string(const char* str)
{
// 空字符串申请1个字节,存放'\0'
if(str == NULL)
{
m_pData = new char[1];
if(m_pData == NULL)
{
cout << "failed!!!" << endl;
exit(1);
}
m_pData[0] = '\0';
}
else
{
int len = strlen(str);
m_pData = new char[len+1];
if(m_pData == NULL)
{
cout << "failed!!!" << endl;
exit(1);
}
strcpy(m_pData, str);
}
}
// 重载=运算符
My_string& My_string::operator=(const My_string& str)
{
if(this == &str)
{
return *this;
}
// 释放原来的内存空间,因为原来内存空间也可能有值
delete [] m_pData;
int len = strlen(str.m_pData);
m_pData = new char [len+1];
if(m_pData == NULL)
{
cout << "failed!!!" << endl;
exit(1);
}
strcpy(m_pData, str.m_pData);
// 返回本对象的引用
return *this;
}
// 析构函数
My_string::~My_string()
{
delete [] m_pData;
}