C++是一门非常强大的编程语言,可以支持各种各样的数据类型和算法。在实际开发中,我们可能会需要将一个字符串转换为数字,或者将数字转换为字符串。C++标准库提供了一些函数可以实现这种转换,而使用C++ string作为中间数据类型,可以更加方便地进行转换操作,本文将介绍如何使用C++ string实现字符串和数字的互转。
一、将字符串转换为数字
在C++中,我们可以使用标准库中的函数stoi
将一个字符串转换为整数。此函数的原型如下:
int stoi(const string& str, size_t* pos = 0, int base = 10);
其中,str
是需要转换的字符串;pos
是一个指针,用于指示转换过程中哪些字符无法被转换为数字;base
表示数字的进制,可以是2、8、10或16。
例如,下面的代码可以将字符串"123"
转换为整数123
:
string str = "123";
int num = stoi(str);
cout << num << endl; // 输出123
如果字符串无法被转换成数字,stoi
函数会抛出一个异常invalid_argument
,我们可以使用try-catch机制来捕获这个异常,如下所示:
string str = "hello";
try{
int num = stoi(str);
cout << num << endl;
}catch(invalid_argument& e){
cout << "转换失败" << endl;
}
二、将数字转换为字符串
如果我们需要将一个数字转换为字符串,可以使用标准库中的to_string
函数。此函数的原型如下:
string to_string(int val);
其中,val
是需要转换的数字。
例如,下面的代码可以将整数123
转换为字符串"123"
:
int num = 123;
string str = to_string(num);
cout << str << endl; // 输出123
三、其他实用技巧
除了上述介绍的基本用法,下面列举一些使用C++ string进行数字和字符串转换时的实用技巧:
1. 将字符串转换为浮点数
如果需要将一个字符串转换为浮点数,可以使用标准库中的stof
函数,其用法与stoi
类似。例如:
string str = "3.14";
float num = stof(str);
cout << num << endl; // 输出3.14
2. 将数字转换为十六进制字符串
有时我们需要将一个数字转换为十六进制格式的字符串,可以使用stringstream
和printf
函数实现,如下所示:
int num = 255;
stringstream ss;
ss << std::hex << num;
string hex_str = ss.str();
printf("%s\n", hex_str.c_str()); // 输出"ff"
3. 将字符串格式化为指定宽度的字符串
如果需要将一个字符串格式化为指定宽度的字符串,可以使用std::setw
和std::setfill
函数,如下所示:
string str = "hello";
string format_str = std::setw(10) << std::setfill('*') << str;
cout << format_str << endl; // 输出"*****hello"
其中,std::setw(10)
表示指定宽度为10个字符,不足的地方用空格填充,而std::setfill('*')
表示使用*
字符填充不足的地方。
四、总结
使用C++ string实现字符串和数字的互转可以在实际开发中提高效率,节约代码量。我们可以使用stoi
、to_string
、stof
等函数实现基本转换,也可以使用stringstream
、printf
等技巧实现更为复杂的操作。