gpt4 book ai didi

c++ - std::stoi 的版本拒绝任何非数字

转载 作者:行者123 更新时间:2023-12-01 18:12:11 30 4
gpt4 key购买 nike

正如您所知,std::sto* 函数系列的工作方式是读取字符串中的数字,直到找到非数字,如下所示:

std::string pseudoNum = "123haha";
int num = std::stoi(pseudoNum); //no problem, num = 123

是否有任何标准方法可以进行更严格的整数解析,这会导致在这种情况下(当字符串不完全整数时)返回异常/错误代码?

最佳答案

您可以使用 C++17 的 std::from_chars并检查解析值的长度:

#include <iostream>
#include <charconv>

int main() {
const std::string str { "123haha" };
int value = 0;
const auto result = std::from_chars(str.data(),
str.data() + str.size(),
value);

if (result.ec == std::errc()) {
std::cout << "Value: " << value << std::endl;
std::cout << "Length: " << result.ptr - str.data() << std::endl;
}

return 0;
}

查看一下 live

C++11解决方案

std::stoi 的第二个参数是一个整数地址,用于存储已处理的字符数。

#include <iostream>

int main() {
const std::string str { "123haha" };
std::size_t processed_chars = 0;
int value = std::stoi(str, &processed_chars);

std::cout << "Value: " << value << std::endl;
std::cout << "Length: " << processed_chars << std::endl;

return 0;
}

查看一下 live

关于c++ - std::stoi 的版本拒绝任何非数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001496/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com