这怎么可能?我的一本课本问题(在这里学习考试)声称你可以这样做并提出以下问题:
编写一个接受字符串的函数。该函数应将字符串转换为整数。如果它无法转换返回0。
示例1:8976返回值
((((8*10 + 9) *10)+ 7 )* 10) + 6
示例2:67A返回值0
如何做到这一点?我知道你可以使用atoi()
函数,但本书希望在没有任何函数的情况下完成这项工作吗?
编辑:进一步思考:
int i, ans;
char number[5]="8976";
for(i=0;i<strlen(number);i++)
ans=(ans*10)+(number[i]-'0');
以上工作会怎样?
答案 0 :(得分:3)
我正在写一些东西,但与此同时,在OP编辑和进一步的评论中基本上回答了这个问题。
这是函数头:
int f(const char *str)
{
变量: v 是计算值, c 是指向当前正在扫描的字符的指针, d 是当前数字。
int v;
const char *c;
int d;
v = 0;
c = str;
当 c 指向 0 时,迭代将在空终止符上停止,在
while (*c)
{
OP获得了正确的主意。
v *= 10;
d = *c - '0';
您应该只测试 d 以检查它是否在 0 和 9 之间。
if (d < 0 || d > 9)
return 0;
此解决方案使用指针代替索引。
v += d;
++c;
}
返回结果。
return v;
}
答案 1 :(得分:0)
你已经到了一半,你的代码还不错,只是错过了一个声明和一个if
int main()
{
int i, ans;
ans=0;
char number[5]="12";
for(i=0;i<strlen(number);i++){
if( !(number[i]>='0' && number[i]<='9') ){
ans = 0;
break;
}
ans=(ans*10)+(number[i]-'0');
}
printf("%d\n",ans);
return 0;
}
你也可以在这里查看代码: http://cfiddle.net/cvYCYB