在C++中,如何从std::string类型的数值字符串中提取出其包含的数字部分,并用另一种数据类型(如int或double)存储?
时间: 2024-10-21 09:04:02 浏览: 24
将Windows字符串资源加载到std :: string或std :: wstring中
在C++中,你可以使用`std::stoi`或`std::stod`函数来将`std::string`类型的数值字符串转换成整数`int`或双精度浮点数`double`。以下是步骤:
1. **转换为整数(int)**:
```cpp
std::string num_str = "12345";
int num_int = std::stoi(num_str);
```
如果字符串不能被解析为有效的整数,`std::stoi`会抛出异常。
2. **转换为双精度浮点数(double)**:
```cpp
std::string num_str = "3.14159";
double num_double = std::stod(num_str);
```
注意,`std::stod`对于非数字字符会有预期的行为,它会在遇到第一个非数字字符后停止读取。
如果不确定输入的字符串是否能被解析,可以先尝试转换,捕获并处理可能出现的`std::invalid_argument`或`std::out_of_range`异常。
```cpp
#include <iostream>
#include <string>
#include <exception>
int main() {
std::string num_str = "abc123";
try {
int num_int = std::stoi(num_str);
std::cout << "Integer: " << num_int << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Invalid integer format: " << e.what() << '\n';
}
try {
double num_double = std::stod(num_str);
std::cout << "Double: " << num_double << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Invalid double format: " << e.what() << '\n';
}
return 0;
}
```
阅读全文