Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::stoi版本拒绝任何非数字_C++ - Fatal编程技术网

C++ std::stoi版本拒绝任何非数字

C++ std::stoi版本拒绝任何非数字,c++,C++,您可能知道,std::sto*函数族的工作方式是读取字符串中的数字,直到找到非数字,如下所示: std::string pseudoNum = "123haha"; int num = std::stoi(pseudoNum); //no problem, num = 123 是否有更严格的整数解析的标准方法,在这种情况下(当字符串不是完全整数时)会导致异常/错误代码返回?您可以使用C++17并检查解析值的长度: #包括 #包括 int main(){ const std::string st

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

std::string pseudoNum = "123haha";
int num = std::stoi(pseudoNum); //no problem, num = 123
是否有更严格的整数解析的标准方法,在这种情况下(当字符串不是完全整数时)会导致异常/错误代码返回?

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

#包括
#包括
int main(){
const std::string str{“123haha”};
int值=0;
const auto result=std::from_chars(str.data(),
str.data()+str.size(),
价值);
如果(result.ec==std::errc()){

第二个参数不适合你吗?
std::stoi的第二个参数非常有用:如果返回的位置等于字符串的大小,那么整个字符串就是一个数字。

std::sto*()
方法的第二个参数是
std::size\u t*pos
,它将设置为用于转换的数字字符数(可以看到)

我就是这样实现的:

int my_stoi(const std::string & str)
{
    std::string::size_type pos;
    const int value = std::stoi(str, /* out */ &pos);

    if (pos != str.size())
    {
        std::cerr << "Failed parsing string '" << str << "' as an integer" << std::endl;
    }

    return value;
}
int my_stoi(const std::string&str)
{
std::string::size\u type pos;
const int value=std::stoi(str,/*out*/&pos);
如果(位置=str.size())
{

我认为没有标准的。我通常在
std::strtol
@HolyBlackCat的基础上编写我自己的函数,如果你能给出答案,它仍然是一个好的:)你当然可以检查
std::string(num)==pseudoNum
“0123”
。虽然我很喜欢这个答案,但我还没有C++17:(@bartop)我也会尝试编写答案的C++11部分