gpt4 book ai didi

c++ - 如何检查一个字符串是否表示一个正的非零整数?

转载 作者:行者123 更新时间:2023-11-27 22:29:27 26 4
gpt4 key购买 nike

我不需要知道 int 是什么,我只需要知道它是否是十进制表示形式的正、非零整数表示形式,没有前导 0。

它将调用大量记录,所以我希望它是尽可能便宜的支票。

预期的行为是系统永远不应该传递未经验证的东西(因为它通常传递的是整数,它会转换为字符串进行存储)所以这只是最后的安全检查,以确保没有发生任何奇怪的事情。

最佳答案

虽然您实际上可以完成将其实际转换为 int 的过程,但我的假设是您真正想知道的是其中的所有字符是否都是数字?

不幸的是,即使那样也没有其他选择,只能线性遍历字符串,尽管这应该比先转换为整数更快。

使用 STL,您可以使用 std::find 和::isdigit 以及 std::not1

template<typename FwdIter>
bool all_digits( FwdIter start, FwdIter end )
{
return std::find( start, end, std::not1(::isdigit) ) == end;
}

当然你可以只写一个循环

template<typename FwdIter>
bool all_digits( FwdIter start, FwdIter end )
{
for( ; start != end; ++start )
{
if( !::isdigit( *start ) )
return false;
}
return true;
}

这不会完全告诉您输入字符串是否表示正数,因为它们可能全为零,并且字符串可能为空。我们可以轻松地在循环版本中覆盖它。

template<typename FwdIter>
bool is_positive_int( FwdIter start, FwdIter end )
{
bool foundNonZero;
for( ; start != end; ++start )
{
if( !::isdigit( *start ) )
return false;
if( *start > '0' ) // it must be a digit
foundNonZero = true;
}
return foundNonZero;
}

假设:

  • 你可能有前导零(但有必须至少有一个非零那里)所以 0234 是一个有效的肯定数
  • 不允许有空格

关于c++ - 如何检查一个字符串是否表示一个正的非零整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4625362/

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