如何检查字符串是否有重复的负号?例如--1

问题描述 投票:-3回答:2

我做了一个函数,告诉我我是否只有数字。

我尝试做-- ;然而这只会弄乱我的负数。

bool isDigit (const std::string &str) {
  return !(str.find_first_of("!@#$^&*()_=+abcdefghifklmnopqrst"
          "uvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") == std::string::npos);
}
c++ c++11 filtering
2个回答
1
投票

您可以使用strtol读取数字字符串并确定它们是否有效:

bool readNumber(const std::string& input, long& result) {
    char* end;
    result = strtol(input.c_str(), &end, 0);
    return *end == 0;
}

如果true是整数字符串,则返回input,并将整数值保存在result中。如果您只需要检查字符串是否为整数,则可以忽略strtol的结果。

该函数将始终返回有效积分字符串的true,但如果result超出该范围,则long将被钳制到std::size_t nextNonDigit (const std::string &str, std::size_t pos) { return str.find_first_of( "!@#$^&*()_=+abcdefghifklmnopqrst" "uvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "-", pos ); } bool isDigit(const std::string& str) { std::size_t number_minuses = 0; for(auto next = nextNonDigit(str, 0); next != std::string::npos;next = nextNonDigit(str, next+1)) { if (str[next] == '-') { ++number_minuses; if (number_minuses > 1) return false; } } return true; } 的最小值/最大值。


0
投票
,

如果你想支持.s或.s或将它限制在一个,001-333s之间的3或任何你必须扩展它。此外,这允许qazxswpoi作为数字。

© www.soinside.com 2019 - 2024. All rights reserved.