📜  c++中的字符串到数字(1)

📅  最后修改于: 2023-12-03 14:39:58.284000             🧑  作者: Mango

c++中的字符串到数字

简介

在c++中,常常需要将字符型数据转换成数字型数据。例如,需要将用户通过输入得到的数字字符串转换成int或double类型,才能进行数值计算或其他操作。

本文将介绍c++中的字符串到数字的转换方法。

stoi函数

在c++11中,可以使用stoi函数将字符串转换成int类型。函数原型如下:

int stoi (const string& str, size_t* idx = 0, int base = 10);

其中,str代表要转换的字符串;idx是一个可选参数,表示转换到字符串的哪个位置停止;base是一个基数参数,对应于str代表的数字的进制数,默认为10进制。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str_num = "123";
    int int_num = std::stoi(str_num);
    std::cout << int_num << std::endl; // 输出123
    return 0;
}
stod函数

如果要将字符串转换成double类型,可以使用stod函数。函数原型如下:

double stod (const string& str, size_t* idx = 0);

其中,str代表要转换的字符串;idx是一个可选参数,表示转换到字符串的哪个位置停止。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str_num = "3.14";
    double double_num = std::stod(str_num);
    std::cout << double_num << std::endl; // 输出3.14
    return 0;
}
常见问题
越界问题

如果要转换的字符串中包含非数字字符,或者数字字符超过了int或double类型所能表示的范围,将导致转换错误。在这种情况下,可以通过检查idx参数来判断转换是否成功。

例如,在以下代码中,字符串包含字母字符,转换失败:

#include <iostream>
#include <string>

int main() {
    std::string str_num = "123abc";
    int int_num = std::stoi(str_num);
    std::cout << int_num << std::endl; // 输出0
    return 0;
}
异常处理

如果需要更精细的错误处理,可以使用try-catch语句捕捉异常。当转换失败时,会抛出std::invalid_argument或std::out_of_range异常。

例如,在以下代码中,使用try-catch语句捕获异常:

#include <iostream>
#include <string>
#include <stdexcept>

int main() {
    std::string str_num = "123abc";
    try {
        int int_num = std::stoi(str_num);
        std::cout << int_num << std::endl; 
    }
    catch(std::invalid_argument& ia) {
        std::cerr << "Invalid argument: " << ia.what() << std::endl;
    }
    catch(std::out_of_range& oor) {
        std::cerr << "Out of Range error: " << oor.what() << std::endl;
    }
    return 0;
}
参考资料