c++ string转int负数
时间: 2024-12-26 11:19:35 浏览: 17
### C++ 中将 `string` 类型转换为 `int` 类型
在 C++ 中,可以使用多种方法来实现从字符串到整数类型的转换,这些方法同样适用于处理负数值。
#### 使用标准库函数 `std::stoi`
最简单的方式之一是利用 `<string>` 头文件中的 `std::stoi()` 函数。此函数能够解析给定的字符串并返回相应的整数值,它会自动识别正负号前缀[^1]。
```cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "-123"; // 输入包含负数的字符串
try {
int num = stoi(str); // 将字符串转成整数
cout << "Converted integer is: " << num << endl;
}
catch (const invalid_argument& e) {
cerr << "Invalid argument provided." << endl;
}
catch (const out_of_range& e) {
cerr << "Value out of range for an int type." << endl;
}
return 0;
}
```
上述代码展示了如何通过捕获异常来安全地执行转换操作。如果输入不是有效的整数表示形式,则抛出 `invalid_argument` 异常;当值超出 `int` 的范围时则触发 `out_of_range` 异常。
#### 自定义实现方式
除了内置的功能外,还可以编写自定义逻辑来进行更复杂的验证或特殊需求下的转换:
```cpp
bool isValidInteger(const string& s, bool allowNegative=true){
size_t i=allowNegative && s[0]=='-' ? 1 : 0;
if(s.empty() || (i==s.size())) return false;
for(; i<s.size(); ++i)
if(!isdigit(s[i])) return false;
return true;
}
int customStringToInt(const string& s){
long result = 0L;
int signMultiplier = 1;
size_t startIdx = 0;
if (!isValidInteger(s)) throw invalid_argument("Not a valid number");
if (s[startIdx] == '-') {
signMultiplier = -1;
startIdx++;
}
for (;startIdx < s.length();++startIdx){
char c = s[startIdx];
result *= 10;
result += static_cast<int>(c - '0');
}
result *= signMultiplier;
if(result > INT_MAX || result < INT_MIN) throw overflow_error("Overflow occurred during conversion");
return static_cast<int>(result);
}
```
这段代码首先检查传入的字符串是否是一个合法的整数表达式(可选支持负数),接着逐位计算最终的结果,并考虑到了可能发生的溢出情况。
阅读全文