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*
- 先将str转成const char*
const char* p = str.c_str();
//c_str(),返回有”\0“的字符串数组
- 再将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…