参考文献:https://blog.csdn.net/jllongbell/article/details/79092891
C语言里面常用的字符串和数字转换函数是sscanf和sprintf
spritf (直观理解:往字符串中写)
sprintf函数原型为 int sprintf(char *str, const char *format, …)
作用是格式化字符串,具体功能如下所示:
(1)将数字变量转换为字符串。
(2)得到整型变量的16进制和8进制字符串。
(3)连接多个字符串。
int main()
{
char str[256] = { 0 };
int data = 1024;
//将data转换为字符串
sprintf(str, "%d", data);
cout << str << endl;
//获取data的16进制表示
sprintf(str, "0x%X", data);
cout << str << endl;
//获取data的8进制表示
sprintf(str, "0%o", data);
cout << str << endl;
const char *s1 = "Hello";
const char *s2 = "world";
//连接字符串
sprintf(str, "%s %s", s1, s2);
cout << str << endl;
double a = 3.1415;
sprintf(str, "%.3lf", a);
cout << str << endl
}
运行结果:
sscanf (直观理解:从字符串中读取数据)
sscanf函数原型为int sscanf(const char *str, const char *format, …) 将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。具体功能如下:
(1)根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等;
(2)取指定长度的字符串
(3)取到指定字符为止的字符串
(4)取仅包含指定字符集的字符串
(5)取到指定字符集为止的字符串
int main(){
char s[15] = "123.432,432";
int n;
double f1;
int f2;
sscanf(s, "%lf,%d%n", &f1, &f2, &n);
cout<<f1<<" "<<f2<<" "<<n;
return 0;
}
运行结果:
这里的11就是转换的字符数。
——————————————————————————————————————————————————————
库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
1.stringstream::str(); returns a string object with a copy of the current contents of the stream.
2.stringstream::str (const string& s); sets s as the contents of the stream, discarding any previous contents.
3.stringstream清空,stringstream s; s.str("");
4.实现任意类型的转换
template<typename out_type, typename in_value>
out_type convert(const in_value & t){
stringstream stream;
stream<<t;//向流中传值
out_type result;//这里存储转换结果
stream>>result;//向result中写入值
return result;
}
int main(){
string s = "1 23 # 4";
stringstream ss;
ss<<s;
while(ss>>s){
cout<<s<<endl;
int val = atoi(s.c_str());
cout<<val<<endl;
}
return 0;
}
int main(){
string s = "1,23,#,4";
stringstream ss;
ss<<s;
while(getline(ss, s, ',')){ //getline()
cout<<s<<endl;
int val = atoi(s.c_str());
cout<<val<<endl;
}
return 0;
}
运行结果: