C++面试常见问题(四)

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值