C++ 字符串与整数之间的转换

这篇博客介绍了在C++中如何将字符串转换为整数以及将整数转换为字符串的两种方法。使用标准库函数`stoi`和通过字符流`stringstream`进行转换,这两种方法都简单易用,适合在不同场景下进行数值类型和字符串类型的互换操作。

一、字符串转整数
1、利用stoi函数

#include<iostream>
#include<string>
using namespace std;
int main(){
    string s="99";
    int num=stoi(s);
    cout<<num<<endl;
    return 0;
}

2、通过字符流进行转换

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    string s="99";
    stringstream ss(s);
    int num;
    ss>>num;
    cout<<num<<endl;
    return 0;
}

二、整数转字符串
1、利用函数to_string()

#include<iostream>
#include<string>
using namespace std;
int main(){
    int num=99;
    string s=to_string(num);
    cout<<s<<endl;
    return 0;
}

2、利用字符流进行转换

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    int num=99;
    stringstream ss;
    ss<<num;
    string s;
    ss>>s;
    cout<<s<<endl;
    return 0;
}
C++中,将字符串转换整数可以通过多种方法实现。以下是几种常用的方式: 1. **使用标准库函数 `atoi()`** `atoi()` 是 C 标准库中的一个函数,用于将字符串转换整数。该函数在 `<cstdlib>` 头文件中定义。如果字符串以数字开头,则会将其转换整数;若字符串中包含非数字字符,则会在第一个非数字字符处停止转换。 ```cpp #include <iostream> #include <cstdlib> using namespace std; int main() { const char* str = "12345"; int num = atoi(str); cout << "转换后的整数为:" << num << endl; return 0; } ``` 如果字符串无法转换整数(例如包含非数字字符),`atoi()` 会返回 0。需要注意的是,该方法无法处理字符串开头的空格和负号以外的其他字符。 2. **使用 `std::stoi()` 函数** `std::stoi()` 是 C++11 引入的字符串转换函数,定义在 `<string>` 头文件中。相比 `atoi()`,`std::stoi()` 提供了更好的错误处理机制。 ```cpp #include <iostream> #include <string> using namespace std; int main() { string str = "12345"; int num = stoi(str); cout << "转换后的整数为:" << num << endl; return 0; } ``` 该函数支持字符串开头的空格,并能处理负数。如果字符串无法转换,会抛出异常(如 `invalid_argument` 或 `out_of_range`)。 3. **手动实现转换逻辑** 如果希望了解字符串转换整数的具体过程,可以手动实现逻辑。以下代码演示了如何将字符串逐个字符转换整数,并考虑负数的情况[^1]: ```cpp #include <iostream> using namespace std; int customStoi(const char* str) { int num = 0; int sign = 1; int i = 0; if (str[0] == '-') { sign = -1; i++; } while (str[i] != '\0') { if (str[i] >= '0' && str[i] <= '9') { num = num * 10 + (str[i] - '0'); } else { break; // 遇到非数字字符停止转换 } i++; } return num * sign; } int main() { const char* str = "-12345"; int num = customStoi(str); cout << "转换后的整数为:" << num << endl; return 0; } ``` 4. **使用 `sscanf()` 函数** `sscanf()` 是 C 标准库中的一个函数,可以从字符串中读取格式化输入。它在 `<cstdio>` 头文件中定义。 ```cpp #include <iostream> #include <cstdio> using namespace std; int main() { const char* str = "12345"; int num; sscanf(str, "%d", &num); cout << "转换后的整数为:" << num << endl; return 0; } ``` 该方法适用于字符串中包含格式化数据的情况。 ### 注意事项 - 在使用 `atoi()` 或 `std::stoi()` 时,需要确保字符串内容符合整数格式要求,否则可能导致错误或异常。 - 如果字符串包含前导空格或非法字符,需要在转换前进行清理或验证。 ### 示例输出 假设输入字符串为 `"12345"`,上述方法的输出结果为: ``` 转换后的整数为:12345 ``` 如果输入字符串为 `"-12345"`,输出结果为: ``` 转换后的整数为:-12345 ``` ### 总结 C++ 提供了多种方式将字符串转换整数,包括使用标准库函数、手动实现逻辑等。选择合适的方法取决于具体需求,例如是否需要处理错误或支持负数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值