我做了一个函数,告诉我我是否只有数字。
我尝试做-- ;
然而这只会弄乱我的负数。
bool isDigit (const std::string &str) {
return !(str.find_first_of("!@#$^&*()_=+abcdefghifklmnopqrst"
"uvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") == std::string::npos);
}
您可以使用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;
}
的最小值/最大值。
,
如果你想支持.
s或.
s或将它限制在一个,
或001-333
s之间的3或任何你必须扩展它。此外,这允许qazxswpoi作为数字。