|
||
|
||
| 今天的整个课程只有这么的一道题,但是学到的东西确很多。下面给出这条题目: 字符数字转为整数数值(字符可以任意:比如"342A")遇到其它否数字取前数。 我所写的程序如下,自认为写得不错: #define N 10; int catio(const char *str) /*const 的作用是常数,所以这里的地址不会返回到实参里*/ { int num[N]; int i=0;j=1,n=0; for(;*str++;i++) { if(*str<48 || *str>57) break; /*判断是否数字数值*/ num[i]=*str-48; } for(i-=1;i>=0;i--) { n+=num[i]*j; j*=10; } return n; } 你们说是不是比较简单呢?现在看不出等看完以下的另一个程序先断定吧。如下:
{ int n,d; char *q,*p; long e=1,s=0; for(q=p=c,n=0;*p!='\0' && *p>='0' && *p<='9';p++,n++,e*=10);
{ d=*q++; switch(d) { case 48: d=0;break; /*太长了,略*/ : : case 57: d=9;break; } s+=d*(e/=10); n--; } return (s); }
long catio(char c[]); { int n,d; char *q,*p; long e=1,s=0; for(q=p=c,n=0;*p && *p>='0' && *p<='9';p++,n++,e*=10);
{ d=*q++-'0'; s+=d*(e/=10); n--; } return (s); }
long catio(char *c); { long s=0; for(;*p && *c>='0' && *c<='9';s=s*10+*c++-'0'); return (s); } 大家看到了吗?原来这么长的程序可以一再简化到这个地步,这就是C语言的灵活了(我好像已经说了好几遍了,真的没有办法,不得不赞叹)。 今天就是这么一题,可真的有意外惊喜呢!好了,现在不写了,还有十道练习题等着我去做呢,大家也要努力喔! |
||