这么简单的题目我也不会做啊!
题目:将一个带正负号的数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“—1234”,则函数把它转换为整数值—1234
int getnum(char str); main() { int i,num=0,flag=1; char str[5]; clrscr(); printf("Pleae input string:\n"); scanf("%s",str); for(i=0;i<5;i++){ if (str[i]==0) break; if( getnum(str[i])==-1 ) if (i==0) flag=-1; else { printf("Error!!"); exit(); } else num=num*10+getnum(str[i]); } num=num*flag; printf("\nThe number is:%d",num); } int getnum(char s){ if (s=='-') return (-1); else if(s=='+') return (0); else return(s-48);}
我在TC2.0上调试正确,可能有更好的办法,请高手不吝赐教 我喜欢编程(vb,c,asp),但水平不高,有志同道合者请联系chinahuxu@126.com
#include <stdio.h>/*因为要调用getchar(),必须连接头文件*/ main() { char a;/*这个变量用来接收字符*/ int m,d;/*m用来处理最后结果,d用来处理正负号*/ d=','-getchar();/*把‘+’和‘-’分别转化为-1和1,这两个字符恰好在‘,’的前后*/ m=0;/*m的初始化*/ a=getchar();/*接受第一个数字字符*/ while(a!='\n')/*以回车键作为结束的标志*/ { m=(m<<3)+(m<<1)+a-'0'; /*第一个括号里的是把m乘以8,第二个括号里的是把m乘以2*/ /*两者相加就是把m乘以10,而且比较快,相当于把十进制数m左移了一位*/ /*第三个括号里的是把数字字符转化为整数值*/ a=getchar();/*接收下一个字符*/ } printf("%d\n",d*m);/*输出最后结果*/ }