C/C++中经常会使用到基本数据类型与字符串(char*)类型的相互转换,我在这里总结一下我学到的几种转换方法,欢迎补充和纠错。
一. 从其他基本数据类型到字符串
方法(1): 使用stdio.h库中的snprintf函数, 将格式化字符串写到char数组
原型:
int snprintf ( char * s, size_t n, const char * format, ... );
参数:
s : 目标字符数组
n: 最大可以写到s中的字符数(包含结尾'\0'字符)
format: 格式化字符串
返回值:
成功时返回写到字符数组中的字符数(结尾的'\0'字符不算在里面),失败时返回负数
示例代码
char s[1000];
int n = snprintf(s, 1000,"%f %d %s", 0.33, 22, "hello");
printf("written char number: %d\nresult string: %s\n", n, s);
return 0;优点:简单直接
缺点:溢出时会发生截断,而且还必须使用正确的格式化字符串,否则会导致不可预知的结果。
方法二(2)使用<sstream>库的stringstream 或ostringstream对象
a. stringstream对象可用于输入和输出流
b. ostringstream对象只用于输出流
ostringstream示例代码:
ostringstream ostream;
ostream<<22<<" "<<0.33;
cout<<ostream.str()<<endlstringstream示例代码:
stringstream stream;
stream<<22<<" "<<0.33;
cout<<stream.str()<<endl;注意: str是stream对象的成员方法,它有以下两个原型:
string str() const; void str (const string& s);第一个原型,是返回当前流内容的字符串。
第二个原型会先清空当前流的内容,然后将s设置为当前流内容。
优点:由编译器进行类型安全检查,简单又安全
缺点:stream对象的构造和析构耗费时间,但是可以通过使用clear后对stream对象进行复用来提高效率。
二. 从字符串到其他基本数据类型
<strong> </strong> int a;
double b;
char s[1000];
sscanf("12 33.33 hello", "%d%lf%s", &a, &b, &s);
cout<<a<<" "<<b<<" "<<s<<endl;优点:简单直接。
a. stringstream对象可用于输入和输出流
b. istringstream对象只用于输入流
stringstream示例代码:
int a;
double b;
char s[1000];
stringstream stream("22 0.33 hello");
//or stream.str("22 0.33 hello");
stream>>a>>b>>s;
cout<<a<<" "<<b<<" "<<s<<endl;istringstream示例代码:
int a;
double b;
char s[1000];
istringstream istream("22 0.33 hello");
//or stream.str("22 0.33 hello");
istream>>a>>b>>s;
cout<<a<<" "<<b<<" "<<s<<endl;

被折叠的 条评论
为什么被折叠?



