我创建了一个告诉我是否只有数字的函数。
我尝试做-- ;
,但这只会弄乱我的负数。
bool isDigit (const std::string &str) {
return !(str.find_first_of("!@#$^&*()_=+abcdefghifklmnopqrst"
"uvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") == std::string::npos);
}
答案 0 :(得分: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
的最小值/最大值。
答案 1 :(得分:0)
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;
}
如果您想支持,
或.
,或者将其限制为.
之间的一个,
或3,或者您需要扩展它的其他内容。另外,这允许001-333
作为数字。