[英]Why does the address of a "size_type" variable is used as an argument of "stoi()" in C++?
size_type变量的地址用作stoi()的参数。 参考链接如下:
我也可以在不使用size_type 的情况下执行相同的操作。 我已经阅读了我提供的文档,但我不知道什么时候应该使用它。
那么,在这里使用size_type变量的地址以及何时使用它有什么贡献呢?
首先,它不是强制性的,它可以是 NULL。 贡献是针对字符串包含多个值的情况。 这允许一一解析它们。 在调用 stoi 之后,*idx 将包含下一个整数的起始索引。 例如:
int main() {
std::string str = "23 45 56 5656";
std::string::size_type off = 0;
do {
std::string::size_type sz;
cout << std::stoi(str.substr(off), &sz) << endl;
off += sz;
} while (off < str.length());
}
// will print
// 23
// 45
// 56
// 5656
编辑:正如@Surt 正确评论的那样,一些错误处理可以而且应该在这里添加。 所以让我们完成这个例子。 该功能Stoi旅馆可以抛出任何invalid_argument
或out_of_range
,这些异常的处理方式。 如何处理它们 - IDK,你的决定是一个例子:
int main() {
std::string str = "23 45 56 5656 no int";
std::string::size_type off = 0;
try {
do {
std::string::size_type sz;
std:cout << std::stoi(str.substr(off), &sz) << std::endl;
off += sz;
} while (off < str.length());
} catch(const std::invalid_argument &e) {
std::cout << "Oops, string contains something that is not a number"
<< std::endl;
} catch(const std::out_of_range &e) {
std::cout << "Oops, some integer is too long" << std::endl;
}
}
如果您的字符串包含的数据不仅仅是数字,您可以使用idx
来解析其余的数据。
这可能有用的另一种情况:如果你想确保你的字符串只包含一个数字 - 你解析这个数字,看看之后出现了什么,如果有的话,你抛出一个异常:像1234heh
这样的东西不是一个有效的数字.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.