您的位置:

使用C++ string实现字符串和数字的互转

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. 将数字转换为十六进制字符串

有时我们需要将一个数字转换为十六进制格式的字符串,可以使用stringstreamprintf函数实现,如下所示:

int num = 255;
stringstream ss;
ss << std::hex << num;
string hex_str = ss.str();
printf("%s\n", hex_str.c_str()); // 输出"ff"

3. 将字符串格式化为指定宽度的字符串

如果需要将一个字符串格式化为指定宽度的字符串,可以使用std::setwstd::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实现字符串和数字的互转可以在实际开发中提高效率,节约代码量。我们可以使用stoito_stringstof等函数实现基本转换,也可以使用stringstreamprintf等技巧实现更为复杂的操作。