c++ to_string() 函数的主要作用是将数字转换为字符串。
to_string() 函数定义在标头 ,因此在使用 to_string() 函数之前需要包含此头文件。
c++ to_string 函数
to_string是C ++ 11中的标准库函数,它将数字转换为字符串,并可以接受任何数字类型。
#include <iostream>
#include <string>
using namespace std;
int main() {
int num1 = 123;
long num2 = 456789;
float num3 = 3.14f;
double num4 = 2.7182818;
string str1 = to_string(num1);
string str2 = to_string(num2);
string str3 = to_string(num3);
string str4 = to_string(num4);
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
cout << str4 << endl;
return 0;
}
123
456789
3.140000
2.718282
to_string 函数作用
使用to_string返回的结果是一个字符串,它也可以使用C ++ STL中的标准string函数进行处理。
#include <iostream>
#include <string>
using namespace std;
int main() {
double num = 123.456789;
string str1 = to_string(num);
string str2 = "Hello World";
cout << str1.substr(0, 5) << endl; //截取前五个字符
cout << str2.size() << endl; //获取字符串长度
return 0;
}
123.4
11
c++ to_string 保留小数点后六位
默认情况下,to_string 默认输出6位小数。
使用 to_string 函数可以将数字转换为字符串。如同 std::format(“{}”, value) 转换数值为字符串。
#include <iostream>
#include <string>
using namespace std;
int main() {
double num = 1212.345678912;
string str1 = to_string(num);
string str2 = to_string(num).substr(0, 9);
string str3 = to_string(num).substr(0, to_string(num).find(".", 0)+7);
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
cout << "str3: " << str3 << endl;
return 0;
}
str1: 1212.345679
str2: 1212.3456
str3: 1212.345679
可以看到,str2仅保留整个前九位,而str3将小数点后的数字截取到第六位。
c++ to_string补位
to_string不会在数字前面添加前导零。如果您需要添加前导零以使数字看起来更整齐,则可以使用其他一些方法:
iomanip
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
int main() {
//方法一:使用iomanip setfill和setw操作
int num1 = 123;
stringstream ss;
// Set field width (function), Set fill character (function)
ss << setw(8) << setfill('0') << num1;
cout << ss.str() << endl;
//方法二:使用sprintf函数
int num2 = 456;
char buf[10];
sprintf(buf, "%08d", num2);
cout << buf << endl;
return 0;
}
00000123
00000456
c++ to_string打印二进制数
to_string还允许指定输出数字的格式,例如二进制。下面的示例显示如何使用to_string将数字转换为二进制字符串。
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main() {
int num = 123;
string str = bitset(num).to_string();
cout << str << endl; //输出二进制数
return 0;
}
00000000000000000000000001111011
c++ to_string为空
使用to_string函数转换空指针时,将引发std ::bad_alloc异常。
#include <iostream>
#include <string>
using namespace std;
int main() {
int *ptr = nullptr;
try {
string str = to_string(*ptr);
}
catch (const std::bad_alloc & e) {
cout << "bad_alloc" << endl;
cout << "Exception: " << e.what() << endl;
}
catch (const std::exception &e) {
cout << "exception" << endl;
cout << "Exception: " << e.what() << endl;
}
cout << "end" << endl;
return 0;
}
c++ to_string 限定长度
使用to_string函数转换数字时,如果超出字符串的最大长度,将自动截断。为了确保输出的字符串不会太长,可以使用std :: to_chars,该函数可以指定输出的最大长度。
#include <iostream>
#include <string>
using namespace std;
int main() {
int num = 123456;
char buffer[10];
auto [p, ec] = to_chars(buffer, buffer + 10, num);
cout.write(buffer, p - buffer) << endl; //最大输出10个字符
return 0;
}