是否有包含负号的 isdigit 函数(重载)?

问题描述 投票:0回答:4

我正在尝试搜索数字的开头。

isdigit
是否有一个 函数可以在
isdigit
中包含负数?这样它就会匹配数字的第一个字符:“-13”?

c++ string numbers digits string-to-symbol
4个回答
4
投票

不,没有。 digit 是由数字表示形式以及基数、符号、小数分隔符、千位分隔符以及指数等其他内容组成的东西。

如果

-
被排放到
isdigit
那么你可能会期望有些人希望
+
也被包括在内,甚至可能
(
)
让会计师高兴。

总而言之,测试某物是否是数字的表示与测试特定字符是否是数字是完全不同的事情。


2
投票

没有,但是做一个很简单

bool my_isdigit(unsigned char ch)
{
    return ch == '-' || std::isdigit(ch);
}

如果您考虑一下数字是什么,这是有道理的。 根据标准,数字被定义为

[0-9]
,详细信息见here,C++ 中实际上没有任何负数。它是一个应用一元
operator -
的正数。


1
投票

不,因为

std::isdigit
仅用于检查单个字符是否是(十进制)数字,而不是数字。

如果您想检查字符串是否包含有效数字(负数或非负数),那么您可以尝试自己解析它(实际上相当简单)或使用例如

std::stoi
(和系列)除了转换(您可以丢弃其结果)之外,还包括输入字符串的验证。


0
投票

例如,要测试 CString 以查看它是否是整数(即负整数或正整数),您可以按如下方式构建辅助函数。

仔细看看函数is_str_digit()。 main 函数仅包含示例。

#include <iostream>
#include <cstring>
#include <iomanip>

bool is_str_digit (const char *str)
{
  int start = 0;
  if (str[0] == '-' || '+')
    {
      start = 1;
    }

  for (int i = start; i < std::strlen (str); i++)
    {
      if (!isdigit (str[i]))
        {
      return false;
    }
    }
  return true;
}

int main ()
{
  const char str1[] = "123\0";
  const char str2[] = "+123\0";
  const char str3[] = "-123\0";
  const char str4[] = "-abc\0";
  const char str5[] = "####\0";

  std::cout << "Is " << std::setw (7) << str1 << " an integer? " <<
    ((is_str_digit (str1)) ? "true" : "false") << std::endl;
  std::cout << "Is " << std::setw (7) << str2 << " an integer? " <<
    ((is_str_digit (str2)) ? "true" : "false") << std::endl;
  std::cout << "Is " << std::setw (7) << str3 << " an integer? " <<
    ((is_str_digit (str3)) ? "true" : "false") << std::endl;
  std::cout << "Is " << std::setw (7) << str4 << " an integer? " <<
    ((is_str_digit (str4)) ? "true" : "false") << std::endl;
  std::cout << "Is " << std::setw (7) << str5 << " an integer? " <<
    ((is_str_digit (str5)) ? "true" : "false") << std::endl;
  return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.