【发布时间】:2018-10-19 13:56:46
【问题描述】:
我需要编写一个函数来检查字符串的一些属性:
- 字符串必须表示一个正整数 (> 0)
- 整数不得超过 32 位内存
- 字符串中没有字母
如果满足这些条件,它应该将字符串作为 int 返回,如果其中任何一个条件不满足,它应该返回 -1。
目前该函数无法处理以下 2 个输入:
4y13.4
如果我的isDigit() 循环按预期工作,它将能够检查它们。为什么循环不起作用?
int convert(const char length[]) {
long input = atol(length);
if (input >= 2147483648 || input <= 0) {
return -1;
}
int chkr = 0;
while (chkr < strlen(length)) {
if (isdigit(length[chkr++]) == 0) {
return -1;
}
else {
return atoi(length);
}
}
input = atol(length);
if (length[0] == '0') {
return -1;
}
if (strlen(length) < 3) {
return -1;
}
else {
return atoi(len gth);
}
}
【问题讨论】:
-
我宁愿使用
strtol。另外请展示一些有效和无效字符串的例子 -
请告诉我们什么是“3 整数字符串”。
-
我建议
length通常不是一个好的字符串名称 - 当然在提供的代码的上下文中。 -
学习使用调试器。
-
从不使用
atol()(或atoi()或atoll())。来自the man page:“...atoi()未检测到错误。”
标签: c