关于atoi的有关问题,请高手们指教
关于atoi的问题,请高手们指教!
我是新手,关于atoi的问题请指教,谢谢!
int atoi(char *s)
{ int sign=1,m=0;
if(*s=='+'||*s=='-') /*判断是否有符号*/
sign=(*s++=='+')?1:-1; /*用到三目运算符*/
while(*s!='\0') /*对每一个字符进行操作*/
{ m=m*10+(*s-'0');
s++; /*指向下一个字符*/
}
return m*sign;
}
我的问题是:1.第一句红色的语句中的有无符号是什么意思?是判断字符串里是否有“+”/“-”吗?
2.下面红色语句是的(*s-'0')计算结果是按整数算的吗?还是和前面的m*10计算后才按整数算的?
------解决方案--------------------
第一句是判断正负号,第二个地方是以整数的,所以atoi这个函数是又缺陷的,它对非法的字符是不做判断的
------解决方案--------------------
if(*s=='+'||*s=='-') /*判断是否有符号*/
sign=(*s++=='+')?1:-1; /*用到三目运算符*/
这两个语句就是用来判断输入的是正还是负的问题!!!
------解决方案--------------------
单步调试和设断点调试是程序员必须掌握的技能之一。
------解决方案--------------------
关于跳过 整形 前面的正负号 可使用 sprintf 试一试
sprintf(str, "%d", x > 0 ? x : -x);
------解决方案--------------------
if(*s=='+'||*s=='-') /*判断是否有符号*/ 正数?负数
m=m*10+(*s-'0'); // ascii 码转换 十进制数字
------解决方案--------------------
我是新手,关于atoi的问题请指教,谢谢!
int atoi(char *s)
{ int sign=1,m=0;
if(*s=='+'||*s=='-') /*判断是否有符号*/
sign=(*s++=='+')?1:-1; /*用到三目运算符*/
while(*s!='\0') /*对每一个字符进行操作*/
{ m=m*10+(*s-'0');
s++; /*指向下一个字符*/
}
return m*sign;
}
我的问题是:1.第一句红色的语句中的有无符号是什么意思?是判断字符串里是否有“+”/“-”吗?
2.下面红色语句是的(*s-'0')计算结果是按整数算的吗?还是和前面的m*10计算后才按整数算的?
------解决方案--------------------
第一句是判断正负号,第二个地方是以整数的,所以atoi这个函数是又缺陷的,它对非法的字符是不做判断的
------解决方案--------------------
if(*s=='+'||*s=='-') /*判断是否有符号*/
sign=(*s++=='+')?1:-1; /*用到三目运算符*/
这两个语句就是用来判断输入的是正还是负的问题!!!
------解决方案--------------------
单步调试和设断点调试是程序员必须掌握的技能之一。
------解决方案--------------------
关于跳过 整形 前面的正负号 可使用 sprintf 试一试
sprintf(str, "%d", x > 0 ? x : -x);
------解决方案--------------------
if(*s=='+'||*s=='-') /*判断是否有符号*/ 正数?负数
m=m*10+(*s-'0'); // ascii 码转换 十进制数字
------解决方案--------------------