作业帮 > 综合 > 作业

谁帮我解释一下这个功能的函数每步实现的功能,就是每步是啥意思

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 00:11:10
谁帮我解释一下这个功能的函数每步实现的功能,就是每步是啥意思
请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数).例如,若输入字符串“-1234”,则函数把它转换为整数值-1234.
long fun(char *p)
{
int i,len,t;
long x=0;
len=strlen(p);
if(p[0]==’-‘)
{ t=-1;len--;p++;}
else t=1;
while(*p)
x=x*10-48+(*p++);
return x*t;
}
前面的是定义变量;
len=strlen(p);//取传入的字符串长
if(p[0]==’-')//判断输入的是否是负数
{ t=-1;len--;p++;}//是,则将负号保留,跳过符号位
else t=1;//否,则符号保留为正
while(*p)
x=x*10-48+(*p++);//用while循环将数字字符串转换为相应的数值
return x*t;//返回值为 x*t 即为该数值x添加符号
//这样说可以么?不知道有没有说清楚.
再问: 这里怎么突然冒出个p[0]呢,开始也没定义数组p[],若判断输入的数是负数,len--,和p++是怎么实现将负号保留,跳过符号位,还有为什么x=x*10-48+(*p++)怎么实现字符串转化为相应的数值的啊,还有你说的那跳过符号位是什么意思啊,我c语言还是菜鸟不过报了二级,急啊,请指教啊
再答: p是指针,你传入一个数组后,p可以当数组用。指针是一个难点,一时也讲不清楚。 假如你输入的数据是:-1234。在数组中就存了5个数据,依次为:-,1,2,3,4。p[0]就是数组的第一位,如果是-号,则t=-1,这样在最后你把转换出来的数据,乘以t,就可以实现符号的保留。 p++就是跳过符号位,因为你要转换的是数字。本来p是指向-号的,++以后就指向1。 本来*p是ASCII码的值,1对应的ASCII码值为49.所以你用1的ASCII码值49-48就等于数值1。乘以10是要还原数值。如:12就等于1*10+2,123=((1*10)+2)*10)+3。所以每次的结果都要*10后才加上各位的数值。