atoi 函数 实现 请高手帮我把下面的程序每一步写上注释

函数名:atoi功能:把字符串转换成整型数用法:intatoi(constchar*str);程序:/****intatoi(char*str)-Convertstrin... 函数名: atoi

功 能: 把字符串转换成整型数

用 法: int atoi(const char * str);

程序:

/***

*int atoi(char *str) - Convert string to int

*

*Purpose:

* Converts ASCII string pointed to by str to binary.

*

*Entry:

* str = ptr to string to convert

*

*Exit:

* return int value of the string

*

*Exceptions:

* None - overflow is not detected.

*

**************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

int atoi(const char * str)

{

assert(str);

int total = 0;

int sign = 1;

if(*str == '-'){

sign = -1;

str ++;

}

else if(*str == '+'){

str++;

}

while(*str){

unsigned int ch = *str - '0';

assert(ch <= 9 && ch >= 0);

total = total * 10 + ch;

str ++;

}

return ret * sign; }
展开
 我来答
Draconious
2009-05-04 · TA获得超过6242个赞
知道大有可为答主
回答量:2142
采纳率:0%
帮助的人:2574万
展开全部
函数名: atoi

功 能: 把字符串转换成整型数

用 法: int atoi(const char * str); //函数签名

程序:

/***

*int atoi(char *str) - Convert string to int //将一个字符串转为一个整数

*

*Purpose: //意义

* Converts ASCII string pointed to by str to binary. //将由str所指向的ASCII型字符串转为二进制

*

*Entry: //输入

* str = ptr to string to convert //str,指向字符串的指针

*

*Exit: //输出

* return int value of the string //返还字符串所代表的整数值

*

*Exceptions: //异常

* None - overflow is not detected. //无。无法检测溢出

*

**************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int atoi(const char * str)

{
assert(str); //如果并未输入任何字符串或一个无效字符串则退出运行

int total = 0; //要输出的结果

int sign = 1; //数字的符号

if(*str == '-'){ //如果第一个字负号

sign = -1; //输出为负数

str ++; //移至下一个字符

}

else if(*str == '+'){ //如果第一个字符是正号

str++; //无改动,移至下一个字符

}

while(*str){ //当字符串还为结尾

unsigned int ch = *str - '0'; //当下字符所代表的数字

assert(ch <= 9 && ch >= 0); //如果该数字不再0至9的范围内退出运行

total = total * 10 + ch; //原数字增加一位

str ++; //移动指针到下一个字符

}

return ret * sign; } //返还所得到的整数,加入符号

最后一行是不是错了?ret根本没有定义,应该是total * sign才对。
百度网友6205bc1
2009-05-03 · TA获得超过6004个赞
知道大有可为答主
回答量:5933
采纳率:20%
帮助的人:2752万
展开全部
函数名: atoi

功 能: 把字符串转换成整型数

用 法: int atoi(const char * str);

程序:

/***

*int atoi(char *str) - Convert string to int

*

*Purpose:

* Converts ASCII string pointed to by str to binary.

*

*Entry:

* str = ptr to string to convert

*

*Exit:

* return int value of the string

*

*Exceptions:

* None - overflow is not detected.

*

**************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

int atoi(const char * str)

{

assert(str); /*这个是断言,也就是如果str==NULL程序就会中断*/

int total = 0;

int sign = 1;

if(*str == '-'){ /*这是判断你的是带负号的有符号数*/

sign = -1; /*负,sign就标记为-1*/

str ++; /*移向负号后面的地址*/

}

else if(*str == '+'){ /*为正,sign=1*/

str++; /*移向正号后面的地址*/

}

while(*str){

unsigned int ch = *str - '0'; /*比如'1'-'0'就能得到数字1*/

assert(ch <= 9 && ch >= 0); /*如何符号位后不是数字程序中断*/

/*比如是"123"
第一次结束total=1
第二次结束total=12 ,total=1*10+2
第三次结束total=123 ,total=12*10+3
*/
total = total * 10 + ch;

str ++;

}
/*这里ret我也不清楚是啥,抱歉
不过我想ret可能包含了total的结果,再乘sign就得到正负数了,
ret在汇编中是返回指令
*/
return ret * sign; }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式