C++中将string类型转化为int类型
在C++编程语言中,有时候我们需要将存储数值的`string`类型转换为整型`int`类型,以便进行数学运算或其他处理。以下是一些在C++中实现这种转换的方法: 1. **`atoi()` 函数**: `atoi()` 是 `ASCII to Integer` 的缩写,它是 `<cstdlib>` 库(在C++98中是 `<stdlib.h>`)的一部分,用于将C风格的字符串(`const char*`)转换为整数。在使用 `atoi()` 时,需要注意以下几点: - 你需要包含相应的头文件:`#include <cstdlib>` 或 `#include <stdlib.h>` - `atoi()` 需要一个指向字符串起始位置的指针,因此,我们需要使用 `string` 类型的成员函数 `c_str()` 来获取这个指针。`c_str()` 返回的是一个 `const char*` 指针,指向字符串的第一个字符。 - 示例代码: ```cpp #include <iostream> #include <cstdlib> using namespace std; int main() { string a = "11", b = "22"; cout << atoi(a.c_str()) + atoi(b.c_str()) << endl; return 0; } ``` - `atoi()` 只能处理非负整数,并且遇到非数字字符会停止解析。如果字符串开头有非数字字符,结果将是0。 2. **`std::stoi()` 函数**: 自C++11开始,标准库提供了更强大的 `std::stoi()` 函数,它可以处理更复杂的字符串转换。`std::stoi()` 可以识别前导空格,并且可以处理负数。它同样位于 `<string>` 库中,所以需要包含 `#include <string>`。 - 使用 `std::stoi()` 时,可以指定转换的基数(二进制到十六进制),默认基数是10。 - 如果解析过程中遇到非数字字符,`std::stoi()` 会抛出 `std::invalid_argument` 异常;如果数字溢出,则抛出 `std::out_of_range` 异常。 - 示例代码: ```cpp #include <iostream> #include <string> using namespace std; int main() { string a = "11", b = "22"; try { cout << stoi(a) + stoi(b) << endl; } catch (const invalid_argument& ia) { cerr << "Invalid argument: " << ia.what() << endl; } catch (const out_of_range& oor) { cerr << "Out of range: " << oor.what() << endl; } return 0; } ``` 3. **手动转换**: 你也可以选择手动转换 `string` 为 `int`。这种方法适用于更复杂的情况,例如,当需要处理数字字符串格式或处理错误时。手动转换通常涉及遍历字符串并逐个累积数字的值。 ```cpp int stringToInteger(const string& str) { int result = 0; bool isNegative = false; for (char c : str) { if (c == '-') { isNegative = true; continue; } result *= 10; result += c - '0'; } return isNegative ? -result : result; } ``` C++中将 `string` 转换为 `int` 有多种方式,不同的方法适应不同的需求和场景。在实际编程中,应根据项目需求选择最合适的方法。在处理字符串转换时,务必注意异常处理,确保程序的健壮性。