C++各基本类型与string的转换

C++各基本类型与string的转换

  • 中已经封装好了对应的转换方法:
    • 标准库中定义了to_string(val);可以将其它类型转换为string
    • 还定义了一组stoi(s,p,b)、stol(s,p,b)、stod(s,p,b)等转换函数.可以分别转化成int、long、double等
void testTypeConvert()
{
    //int --> string
    int i = 5;
    string s = to_string(i);
    //double --> string
    double d = 3.14;
    //long --> string
    long l = 123234567;
    
    //char --> string
    char c = 'a';
    cout << to_string(c) << endl;   //自动转换成int类型的参数
    //char --> string
    string cStr; cStr += c;
 
    s = "123.257";
    //string --> int;
    cout << stoi(s) << endl;
    //string --> int
    cout << stol(s) << endl;
    //string --> float
    cout << stof(s) << endl;
    //string --> doubel
    cout << stod(s) << endl;
}
  • 利用 strstream 进行转换
template<class T>
string convertToString(const T val)
{
    string s;
    std::strstream ss;
    ss << val;
    ss >> s;
    return s;
}

int convertStringToInt(const string &s)
{
    int val;
    std::strstream ss;
    ss << s;
    ss >> val;
    return val;
}

char*与string

  • char* 转 string
string s(char *);
//只能初始化,在不是初始化的地方最好还是用assign().
  • string 转 char*
  1. 先将str转成const char*
const char* p = str.c_str(); 
//c_str(),返回有”\0“的字符串数组
  1. 再将const char* 转成 char*
char* res = new char[str.size()+1];
strcpy(res,p); // 在遇到\0'后,循环停止。

strcpy的经典实现

char* strcpy(char* des,const char* source)
 
{
 char* r=des;
  assert((des != NULL) && (source != NULL));
 while((*r++ = *source++)!='\0');
 return des;
}

memcpy内存重叠问题

  • memcpy功能实现的就是把str地址开始的n个字节拷到到目标dest开始的地址.
  • 无重叠
void *mymemcpy(void *dst,const void *src,size_t num)  
{  
       if(NULL == dst || NULL == src){  
       return NULL;  
       }  
       //assert((dst !=NULL) && (src!=NULL));

       if(dst>=src+num||src>dst+num){  
        char * psrc = (char *)src;
        char * pdst = (char *)dst;  
        while(num-->0)*pdst++ = *psrc++;  
       }  
       return dst;  
} 
  • 有重叠
void * mymemcpy(void *dst, const void *src, size_t count)  
{  
    if (dst== NULL || src == NULL)  
          return NULL;  
    char *pdest = (char *)(dst);  
    const char *psrc  = (char *)(psrc);  
    int n = count;  
    //pdest地址高于psrc地址,且有重叠
    if (pdest > psrc && pdest < psrc+count)  
    {  
        for (size_t i=n-1; i != -1; --i)  
        {  
                pdest[i] = psrc[i];//从高到低赋值  
        }  
    }  
    //pdest地址低于psrc地址,且有重叠
    else if(pdest < psrc && pdest > psrc-count)
    {  
        for (size_t i= 0; i < n; i++)  
        {  
                pdest[i] = psrc[i];//从低到高赋值  
        }  
    }  
    return dst;  
}

参考资料

【整理】C++ string转int,string转double,string转long,int转string,double转string…

memcpy内存重叠问题

细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值