我是靠谱客的博主 义气煎蛋,最近开发中收集的这篇文章主要介绍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(),返回有”“的字符串数组
  1. 再将const char* 转成 char*
char* res = new char[str.size()+1];
strcpy(res,p); // 在遇到'后,循环停止。

strcpy的经典实现

char* strcpy(char* des,const char* source)
 
{
 char* r=des;
  assert((des != NULL) && (source != NULL));
 while((*r++ = *source++)!='');
 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函数

最后

以上就是义气煎蛋为你收集整理的C++各基本类型与string的转换的全部内容,希望文章能够帮你解决C++各基本类型与string的转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部