浏览 3188 次
锁定老帖子 主题:atoi_字符串数字转换为整型
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-28
最后修改:2010-10-28
实现字符串中的数字转换为整型,具体规则见源码注释。gcc编译通过。
第一种代码,过程有些繁琐: #include<stdio.h> /* 求幂 * 此处求幂也可以调用math.h中的函数pow(), * 编译时添加“-lm”参数。 */ double mypow(double x,double y) { int tmp=1; while(y-->0) { tmp*=x; } return tmp; } /* 转化字符串中的数字字符到整数。规则如下: * 1、如果字符串开始是一个字母,则返回零; * 2、否则,把数字字符转换成整型数,直到遇到字母字符为止。 */ int myatoi(const char *str) { int i=0,j=0,rslt=0; if(*str<'0'||*str>'9') return 0; while(*str>='0'&&*str<='9') { str++; i++; } while(i-->0) { rslt+=(int)mypow(10,j++)*(*--str-'0'); } return rslt; } int main() { char *strtest1="a1234",*strtest2="6789d"; printf("%d\n%d\n",myatoi(strtest1),myatoi(strtest2)); return 0; }
另一段代码,对符号等做出判断,转换思路做出优化: #include<stdio.h> /* 转化字符串中的数字字符到整数。规则如下: * 1、如果字符串开始是一个字母,则返回零; * 2、否则,把数字字符转换成整型数,直到遇到字母字符为止; * 3、另有符号空格等的判断。 */ int myatoi(const char *str) { int sign=1,rslt=0; while(' '==*str||'\t'==*str) str++; if('-'==*str) { sign=-1; str++; } else if('+'==*str) str++; while('0'==*str) str++; if(*str<'0'||*str>'9') return 0; while(*str>'0'&&*str<='9') rslt=rslt*10+(*str++-'0'); return sign*rslt; } int main() { char *strtest1=" 1234",\ *strtest2="-6789d",\ *strtest3="+0324dk",\ *strtest4="0043 5",\ *strtest5="-s0012"; printf(\ "%d\n%d\n%d\n%d\n%d\n",\ myatoi(strtest1),\ myatoi(strtest2),\ myatoi(strtest3),\ myatoi(strtest4),\ myatoi(strtest5)\ ); return 0; }
May contact with me via e-mail: AllenNewOK@126.com
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |