C++中用于数值类型与字符串类型之间相互转换的函数to_string,stoi函数
1、数值转换为字符串(to_string
函数)
C++11在<string>
头文件中引入了to_string
函数,该函数有多个重载版本,可以接收不同类型的参数(如int、long、double
等)并返回相应的字符串表示。
使用示例:
#include <iostream>
#include <string>
int main() {
int num = 123;
std::string str = std::to_string(num);
std::cout << "Number as string: " << str << std::endl;
double pi = 3.14159;
std::string pi_str = std::to_string(pi);
std::cout << "Pi as string: " << pi_str << std::endl;
return 0;
}
2、字符串转换为数值(sto~
函数)
C++11同样在<string>
头文件中提供了一系列函数用于将字符串转换为数值类型。这些函数包括stoi、stol、stoll、stoul、stoull、stof、stod和stold
(函数名字即string to 对应类型的首字母简写)。它们允许您指定一个字符串,一个可选的位置指针(用于指示转换结束后的位置),以及一个可选的基数(用于指定数值的进制)。
使用示例:
#include <iostream>
#include <string>
int main() {
std::string str = "12345";
int num = std::stoi(str);
std::cout << "String to int: " << num << std::endl;
std::string float_str = "3.14159";
double value = std::stod(float_str);
std::cout << "String to double: " << value << std::endl;
// 使用位置指针和基数
std::string hex_str = "A3F"; // 十六进制数
size_t pos;
int hex_num = std::stoi(hex_str, &pos, 16); // 基数为16
std::cout << "Hex string to int: " << hex_num << std::endl;
return 0;
}
注意事项
当使用sto~
转换函数时,如果字符串不能被正确解析为数值(例如,字符串包含非数字字符,能正确转换的必须要求string开头为数字,后面可以不是数字,如“123number”可以被转换成123,而“number123”会报错
),则这些函数会抛出std::invalid_argument
或std::out_of_range
异常。因此,在使用这些函数时,通常建议使用try-catch块来捕获并处理这些异常。
位置指针参数是可选的,但如果您提供了它,则可以在函数返回后查看字符串中第一个无法被解析为数值的字符的位置。
基数参数也是可选的,并默认为10(十进制)。但是,对于stoi、stol、stoll、stoul和stoull
函数,您可以指定其他基数(如2、8、16等)来解析不同进制的数值字符串。