atoi() 函数如何处理非数字情况?
How atoi() function handles non numeric cases?
我试图编写自己的 atoi()
函数实现,并尝试了两种不同的代码:
#include <stdio.h>
#include <string.h>
int myatoi(const char *string);
int main(int argc, char* argv[])
{
printf("\n%d\n", myatoi("str"));
getch();
return(0);
}
int myatoi(const char *string){
int i;
i=0;
while(*string)
{
i=(i<<3) + (i<<1) + (*string - '0');
string++;
// Don't increment i!
}
return i;
}
和
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int x;
gets(str);
printf("%d",myatoi(str));
}
int myatoi(char *str) {
int res =0;
int i;
for (i = 0; str[i]!= '[=11=]';i++) {
res = res*10 + str[i] - '0';
}
return res;
}
这两种情况都适用于输入,例如1999.
但如果我偶然传递用户输入,例如"abcd",它正在返回一些数值。我用原来的 atoi()
试过了,在这种情况下它是 returns 0。
谁能给我解释一下如何通过 atoi()
处理非数字输入。
你应该使用isdigit()
来查看下一个字符是否是(十进制)数字,如果失败则停止。
您还需要检查并处理前导减号以表示负数。不确定是否--12
是否与atoi()
有效,可能不是。
另外请不要像那样对乘法进行微优化,现在已经不是 90 年代了。 :)
在你自己的myatoi()
函数中,使用isdigit()
检查传入指针的每个索引值,return一个0
一旦isdigit()
本身 returns 0
.
我试图编写自己的 atoi()
函数实现,并尝试了两种不同的代码:
#include <stdio.h>
#include <string.h>
int myatoi(const char *string);
int main(int argc, char* argv[])
{
printf("\n%d\n", myatoi("str"));
getch();
return(0);
}
int myatoi(const char *string){
int i;
i=0;
while(*string)
{
i=(i<<3) + (i<<1) + (*string - '0');
string++;
// Don't increment i!
}
return i;
}
和
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int x;
gets(str);
printf("%d",myatoi(str));
}
int myatoi(char *str) {
int res =0;
int i;
for (i = 0; str[i]!= '[=11=]';i++) {
res = res*10 + str[i] - '0';
}
return res;
}
这两种情况都适用于输入,例如1999.
但如果我偶然传递用户输入,例如"abcd",它正在返回一些数值。我用原来的 atoi()
试过了,在这种情况下它是 returns 0。
谁能给我解释一下如何通过 atoi()
处理非数字输入。
你应该使用isdigit()
来查看下一个字符是否是(十进制)数字,如果失败则停止。
您还需要检查并处理前导减号以表示负数。不确定是否--12
是否与atoi()
有效,可能不是。
另外请不要像那样对乘法进行微优化,现在已经不是 90 年代了。 :)
在你自己的myatoi()
函数中,使用isdigit()
检查传入指针的每个索引值,return一个0
一旦isdigit()
本身 returns 0
.