目录

  • 环境
  • sprintf
  • to_string() 与 to_wstring()
  • itoa


环境

OS:win 10
IDE:Visual Studio 2017

sprintf

  1. 描述:sprintf 是一种 C 风格的字符串与数字拼接的方式,因为在 C 中没有 string 这种数据类型,所以它是将 char 类型的数据和数字类型(int, long, float 等)拼接
  2. 函数原型:int sprintf(char *buffer,const char *format [,argument] ...);
  3. 函数定义:sprintf 代表 “string printf”。它将输出数据存储在 buffer
  4. 返回值:如果成功则返回写入缓冲区的字符数量,如果出现错误返回 -1
  5. 示例
#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()

  1. 描述:在 C++11 后,string 类型的字符串之间可以直接通过 “+” 拼接,于是我么可以通过 to_string() 将数字转换成 string 类型,再进行拼接
  2. 函数原型:string to_string ( xxx val); 其中 xxx 可以是诸如 intlonglong longfloatdouble 等这一类型
  3. 函数定义:将数字转换成 string 类型
  4. 返回值:返回转换后的字符串
  5. 示例
#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

  1. 描述:itoa 即 convert int to a string,将整型转换成 string 类型
  2. 函数原型:char * itoa ( int value, char * str, int base ); 在这里 value 表示要转换的 int 的值,str 表示最终转换成的字符串,base 表示进制,一般而言当传入 base 为 10 时,表示基于 10 进制转换
  3. 函数定义:注意 itoa 并不是 C++ 的一部分,只是一些编译器支持它,在该场景下,最好使用 sprintf 来替代它
  4. 返回值:指向 str 的指针,和参数 str 一样
  5. 示例
void Exampleitoa()
{
	int i = -1;
	char buffer[30];
	_itoa(i, buffer, 10);
	std::cout << buffer << std::endl; // -1
									  // 此处已经是字符串形式的 -1 了
}

【注】当 base 为 10 的时候,且当 value 为负数,那么转换后的字符串结果会自动加上一个负号(-),而其他进制的时候,value 会被视为无符号
【注】str 这个参数必须要足够容纳转换后的字符串大小