A-A+

请编写一个函数fun() 它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字

2022-08-05 20:28:28 问答库 阅读 171 次

问题详情

请编写一个函数fun(),它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。
例如,若输入字符串“-1234”,则函数把它转换为整数值 -1234。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include <stdio.h>
include <string.h>
long fun(char *p)
{
}
main ()
{
char s[6];
long n;
printf("Enter a string:n");
gets(s);
n=fun(s);
printf("%ldn",n);
}请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:long fun (char *p){long n=0;int flag=1;if(*p=='-') /*负数时置flag为-1*/{p++;flag=-1;}else if(*p=='+') /*正数时置flag为1*/p++;while(*p!='\0'){n=n*10+*p-'0'; /*将字符串转成相应的整数*/p++;}return n*flag;}
long fun (char *p){long n=0;int flag=1;if(*p=='-') /*负数时置flag为-1*/{p++;flag=-1;}else if(*p=='+') /*正数时置flag为1*/p++;while(*p!='\0'){n=n*10+*p-'0'; /*将字符串转成相应的整数*/p++;}return n*flag;} 解析:if()的作用是判断它是正数还是负数。while()循环的作用是将字符串转成相应的整数。注意*p是一个字符如'9', '4',并不是一个数,要将其转成相应的数字必须令其减去'0'(不是'\0'),即*p-'0'就得到*p这个字符的相应数字。如'0'-'0'=0, '8'-'0'=8等。必须在程序的前面加#include<stdlib.h>,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。

考点:整数,字符串