C++ 整型与字符串的互转方式
flyfish 字符串转整型 C的方法 cstr是char*或者const char*类型的字符串 int num = atoi(str); int num = strtol(cstr, NULL, 10); //10 表示进制 C++11的方法 void test1() { std::string str1 = "1"; std::string str2 = "1.5"; std::string str3 = "1 with words"; int myint1 = std::stoi(str1); int myint2 = std::stoi(str2); int myint3 = 在C++编程中,数据类型之间的转换是常见的操作,特别是在处理用户输入或数据显示时。本文主要探讨的是如何在整型(integer)与字符串(string)之间进行转换,这对于理解和编写涉及用户界面或文件读写的应用程序至关重要。 让我们看下如何将字符串转换为整型。在C++中,有两个主要的函数可以实现这个功能:`atoi()` 和 `strtol()`。这两个函数都接收一个`char*`或`const char*`类型的字符串作为参数,然后返回相应的整型数值。 1. `atoi()` 函数是最简单的方法,它会尝试将字符串解析为整数,但不提供错误处理。例如: ```cpp int num = atoi("123"); ``` 2. `strtol()` 函数则更为灵活,它可以处理不同进制的数字,并且可以通过第二个参数获取未被解析的部分。第三个参数表示数字的基数(如10代表十进制): ```cpp int num = strtol("123", NULL, 10); ``` 在C++11标准之后,`std::stoi()` 函数被引入,它提供了更现代且安全的转换方式。`std::stoi()` 可以直接接受`std::string`类型的参数,同时能抛出异常来处理转换失败的情况。例如: ```cpp std::string str = "123"; int num = std::stoi(str); ``` 如果字符串包含非数字字符,`std::stoi()` 会停止解析并在找到第一个非数字字符的位置返回结果,也可以通过第二个参数获得未被解析的部分。 需要注意的是,`std::stoi()` 在遇到无法转换的字符时,如果设置了错误处理,会抛出`std::invalid_argument`异常;如果溢出,则抛出`std::out_of_range`异常。 反过来,将整型转换为字符串,C++11提供了`std::to_string()`函数,这使得转换非常直观: ```cpp int value = 123; std::string strValue = std::to_string(value); ``` 同样,对于无符号整型(如`unsigned int`)、浮点型(如`float`和`double`),也有对应的`std::to_string()`重载版本,例如: ```cpp float floatValue = 3.14f; std::string strFloat = std::to_string(floatValue); ``` 在处理进制转换时,例如将十六进制字符串转换为整型,可以先用`std::stoi()`配合适当的基数进行转换,然后根据需要进行进一步的操作。 总结来说,C++ 提供了多种方法来实现整型与字符串的互转,包括传统的`atoi()`和`strtol()`,以及C++11引入的`std::stoi()`和`std::to_string()`。选择哪种方法取决于具体需求,如是否需要错误处理、转换的灵活性以及是否支持C++11等。在实际编程中,推荐使用`std::stoi()`和`std::to_string()`,因为它们更安全、更现代,而且易于理解。