c++中stoi函数的使用小结
std::stoi是C++标准库中的一个函数,用于将字符串转换为整数类型。它的全名是std::string to int,所以stoi就是string to int的缩写。
函数原型如下:
int stoi( const std::string& str, std::size_t* pos = 0, int base = 10 );
参数解释:
str:要转换的字符串。pos:可选参数,表示转换后的字符串的结束位置。如果提供了这个参数,函数会将转换后的字符串的结束位置存储在它所指向的位置上。base:可选参数,用于指定字符串表示的数的进制。默认值是10。
函数功能: std::stoi会从字符串的开头开始,依次读取字符,直到遇到非数字字符或字符串结束。它将读取到的数字字符解析为整数,并返回转换后的整数值。
如果字符串中的第一个字符是非数字字符,或者字符串为空,或者不包含任何数字字符,std::stoi会抛出一个std::invalid_argument异常。如果转换后的整数值超出了所表示的整数类型的范围,std::stoi会抛出一个std::out_of_range异常。
示例用法:
#include <iostream>
#include <string>
int main() {
std::string str = "12345";
int num = std::stoi(str);
std::cout << num << std::endl; // 输出:12345
return 0;
}
上述代码将字符串"12345"转换为整数12345,并输出结果。
示例2:使用 idx 参数
#include <iostream>
#include <string>
int main() {
std::string str = "123abc";
std::size_t idx;
try {
int num = std::stoi(str, &idx);
std::cout << "转换结果: " << num << std::endl;
std::cout << "转换停止位置: " << idx << std::endl;
} catch (const std::invalid_argument& e) {
std::cout << "无效的输入: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cout << "数值超出范围: " << e.what() << std::endl;
}
return 0;
}
在这个示例中,我们使用了 std::stoi 的第二个参数 idx,它存储了转换停止的位置,即字符串中 “123” 之后的字符 ‘a’ 的索引。
示例3:使用 base 参数
#include <iostream>
#include <string>
int main() {
std::string str = "1a2";
try {
int num = std::stoi(str, nullptr, 16); // 将字符串视为十六进制数
std::cout << "十六进制转换结果: " << num << std::endl;
} catch (const std::invalid_argument& e) {
std::cout << "无效的输入: " << e.what() << std::endl;
} catch (const std::out_of_range& e) {
std::cout << "数值超出范围: " << e.what() << std::endl;
}
return 0;
}
在这个示例中,我们使用了 std::stoi 的第三个参数 base,将字符串 “1a2” 视为十六进制数进行转换。
异常
如果转换失败(例如,字符串不包含有效的整数),stoi() 会抛出一个 std::invalid_argument 异常。如果转换后的数字超出了 int 类型的范围,会抛出 std::out_of_range 异常。
注意事项
- 确保字符串只包含有效的数字字符,否则
stoi()会抛出异常。 - 如果需要处理可能抛出的异常,应该使用
try-catch块来捕获这些异常。 - 如果输入的字符串不是有效的整数表示,
std::stoi会抛出std::invalid_argument异常。 - 如果字符串表示的数值超出了
int类型的范围,std::stoi会抛出std::out_of_range异常。 - 使用
idx参数时,如果转换失败,idx将被设置为 0。 - 使用
base参数时,如果设置为0,函数会根据字符串的前缀自动确定数制。如果字符串以 “0x” 或 “0X” 开头,表示十六进制;如果以 “0” 开头,表示八进制;否则,表示十进制。
到此这篇关于c++中stoi函数的使用小结的文章就介绍到这了,更多相关c++ stoi函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C/C++: Inline function, calloc 对比 malloc
以下是对c/c++中的malloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下2016-07-07
C++中const char*、char const*、char * const三者的区别
这篇文章主要介绍了C++中const char*、char const*、char * const三者的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-09-09
C++无法从“const char[ ]”转换为“char *”问题及解决
这篇文章主要介绍了C++无法从“const char[ ]”转换为“char *”问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04
stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)
这篇文章主要介绍了stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列),需要的朋友可以参考下2014-05-05


最新评论