bool isInt(string input) { //checks if string input is an int
if (input[0] == '-') { //checks if negative number
for (int a = 1; a < input.length(); a++) {
if (isdigit(input[a])) {
return true;
}
else {
return false;
}
}
}
for (int b = 0; b < input.length(); b++) {
if (isdigit(input[b])) {
return true;
} else {
return false;
}
}
}
所以这里我的代码是检查用户输入的字符串输入并查看它是否为整数。它的工作原理除外,如果第一个字符是 - 或者数字,但如果那个后面跟着-23ab或-4b等字符,我的程序将不会将其视为错误,因为它不是有效数字。我知道错误是由于我返回true / false语句,但我不知道如何解决它的任何方法。
有什么想法吗?
答案 0 :(得分:1)
根本不起作用!!
它只关心字符串中的第一个字符,因为无论字符的状态是什么return
。您需要将结果存储在变量中并继续搜索直到第一次失败。
答案 1 :(得分:0)
只要看到1位数,您就会返回true。只有当你把它带到错误的字符串末尾时才应该返回true。你可以提早返回false,但是对于这个问题,你最后应该只返回true。
答案 2 :(得分:0)
正如其他人所说,你只是检查第一个字符并返回第一个字符是否是数字......你要做的是检查字符是否是数字....如果是这样,那么继续你下一个数字。你返回的唯一原因是你要么经历了所有角色,要么找到了非数字角色。
for each character
if character is a digit
do nothing
else
return that it is false.
return true //you will only get to this statement if all characters are digits
这就是你所拥有的......
for each character
if character is a digit
return true
else
return false
所以它在检查其余字符之前基本上会返回
答案 3 :(得分:0)
您的代码正在努力 。您正在测试成功和失败,而不仅仅是寻找失败案例。
以下代码的位置索引为0,如果字符串不为空,则检查前导' - ',如果找到,则将索引位置递增为1。
然后它只是通过字符串检查非数字字符,如果找到则会失败。
如果它到达字符串的末尾,则字符串全部为数字。
bool isInt(const std::string& in)
{
size_t pos = 0;
if (!in.empty() && in[0] == '-')
pos = 1;
if (pos >= in.size()) // catch "" and "-"
return false;
do {
if (!isdigit(in[pos]))
return false;
} while (++pos < in.length());
return true;
}
这可以解决您当前的问题,但仍有问题:字符串“123456789123456789”是否为int?存储在int中太大了。