目录
- 环境
- sprintf
- to_string() 与 to_wstring()
- itoa
环境
OS:win 10
IDE:Visual Studio 2017
sprintf
- 描述:
sprintf
是一种 C 风格的字符串与数字拼接的方式,因为在 C 中没有 string 这种数据类型,所以它是将 char 类型的数据和数字类型(int, long, float 等)拼接 - 函数原型:
int sprintf(char *buffer,const char *format [,argument] ...);
- 函数定义:
sprintf
代表 “string printf”。它将输出数据存储在buffer
中 - 返回值:如果成功则返回写入缓冲区的字符数量,如果出现错误返回 -1
- 示例
#include <iostream>
void ExampleSprintf()
{
int a = 1, b = 2;
float c = 5.5;
char srcBuf[7] = "noname";
char destBuf[15] = { 0 }; // 初始化为 0 字符
int res = sprintf(destBuf, "%d%s%d%.1f", a, srcBuf, b, c); // .1f 表示仅输出小数点后 1 位
std::cout << destBuf << std::endl; // 1noname25.5
std::cout << "res: " << res << std::endl; // 11
}
【注】char
类型的指针和数组都可以
to_string() 与 to_wstring()
- 描述:在 C++11 后,string 类型的字符串之间可以直接通过 “+” 拼接,于是我么可以通过
to_string()
将数字转换成 string 类型,再进行拼接 - 函数原型:
string to_string ( xxx val);
其中 xxx 可以是诸如int
,long
,long long
,float
,double
等这一类型 - 函数定义:将数字转换成 string 类型
- 返回值:返回转换后的字符串
- 示例
#include <iostream>
#include <string>
void ExampleTo_String()
{
int a = 1, b = 2;
float c = 5.5;
std::string srcString = "noname";
std::string destString;
destString = std::to_string(a) + srcString + std::to_string(b) + std::to_string(c);
std::cout << destString << std::endl; // 1noname25.500000
}
【注】要使用 string 和 to_string()
需要引入头文件 <string>
【注】to_string()
不支持格式化浮点类型的数据,但你可以通过其它方式截断小数点后的内容
【注】to_wstring()
是针对宽字符的数据类型转换函数,它的用法基本和 to_string()
相同,但要保证所有组合在一起的数据类型都是宽字符的,以下是一个示例
#include <tchar.h> // for _TEXT()
#include <string> // for wstring
#include <iostream> // for wcout
void WString()
{
wstring wsDemo = _TEXT("wstring demo");
wstring wsDemo2 = _TEXT("wstring demo 2");
wsDemo = wsDemo + _TEXT(" and ") + wsDemo2;
std::wcout << wsDemo << std::endl; // wstring demo and wstring demo 2
}
itoa
- 描述:itoa 即 convert int to a string,将整型转换成 string 类型
- 函数原型:
char * itoa ( int value, char * str, int base );
在这里 value 表示要转换的 int 的值,str 表示最终转换成的字符串,base 表示进制,一般而言当传入 base 为 10 时,表示基于 10 进制转换 - 函数定义:注意 itoa 并不是 C++ 的一部分,只是一些编译器支持它,在该场景下,最好使用 sprintf 来替代它
- 返回值:指向 str 的指针,和参数 str 一样
- 示例
void Exampleitoa()
{
int i = -1;
char buffer[30];
_itoa(i, buffer, 10);
std::cout << buffer << std::endl; // -1
// 此处已经是字符串形式的 -1 了
}
【注】当 base 为 10 的时候,且当 value 为负数,那么转换后的字符串结果会自动加上一个负号(-),而其他进制的时候,value 会被视为无符号
【注】str 这个参数必须要足够容纳转换后的字符串大小