c++将字符串转化为整型数的函数
时间: 2025-03-25 16:01:57 浏览: 70
### C++ 中将字符串转换为整型数的方法
在 C++ 编程语言中,存在多种方法可以实现从字符串到整型数的转换。以下是几种常见的技术及其特点:
#### 使用 `std::stoi` 函数
C++11 引入了一个标准库函数 `std::stoi`(string to integer),它可以直接将字符串转换为整型数。此函数位于 `<string>` 头文件中。
```cpp
#include <iostream>
#include <string>
int main() {
std::string str = "123";
try {
int num = std::stoi(str);
std::cout << "Converted number: " << num << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Invalid argument: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << "Out of range: " << e.what() << std::endl;
}
return 0;
}
```
该函数会抛出异常 `std::invalid_argument` 如果输入字符串无法解析为有效的整数[^1],或者抛出 `std::out_of_range` 如果数值超出了目标类型的范围[^4]。
---
#### 使用 `stringstream`
另一种方式是利用 `std::stringstream` 类来完成字符串到整型数的转换。这种方法不需要处理异常,但可能稍微复杂一些。
```cpp
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::string str = "456";
std::stringstream ss(str);
int num;
if (ss >> num) {
std::cout << "Converted number: " << num << std::endl;
} else {
std::cerr << "Conversion failed!" << std::endl;
}
return 0;
}
```
通过流操作符 (`>>`) 可以轻松提取整数值。如果输入不合法,则不会成功赋值给变量 `num`[^2]。
---
#### 使用 `atoi` 或 `strtol`
虽然 `atoi` 是一种传统的方式,但它并不推荐用于现代 C++ 开发,因为它缺乏错误检测机制。相比之下,`strtol` 提供更强大的功能并允许检查转换过程中的错误。
```cpp
#include <cstdlib> // for strtol
#include <climits> // for LONG_MAX and LONG_MIN
#include <iostream>
#include <cstring> // for strlen
int main() {
const char* str = "789";
char* endptr;
long result = std::strtol(str, &endptr, 10);
if (*str == '\0' || *endptr != '\0') {
std::cerr << "Error in conversion." << std::endl;
} else if (result > INT_MAX || result < INT_MIN) {
std::cerr << "Result out of range." << std::endl;
} else {
std::cout << "Converted number: " << static_cast<int>(result) << std::endl;
}
return 0;
}
```
这里需要注意的是,`strtol` 的返回类型是 `long` 而不是 `int`,因此需要显式地将其转换为目标类型,并验证其是否超出范围[^3]。
---
### 总结
上述三种方法各有优劣:
- **`std::stoi`**:简单易用,适合大多数场景,但依赖于异常处理。
- **`std::stringstream`**:灵活性高,无需捕获异常,适用于复杂的输入/输出需求。
- **`strtol`**:提供详细的控制选项以及错误报告能力,在某些情况下可能是更好的选择。
根据具体的应用环境和个人偏好可以选择合适的技术方案。
阅读全文
相关推荐




















