自己写的强力型字符转换长整型函数
这是我在写一个百度之星题目时顺带写出来的,因为系统自带的atoi函数太弱,处理不了大的数,所以自己写了个更强劲的。代码如下,里面对函数也都有说明,有任何问题请留言,谢谢!
我用的是Arch Linux系统,vim编辑,gcc编译。
#include <stdlib.h> //str2l.h //主函数为double str2l(char s[]),通过调用此函数来进行操作。 //double str2l(char src[]) //参数为需要操作的字符串。需要操作的字符串必须介于-9223372036854775808和9223372036854775807之间,即-2^63和2^63-1之间,此范围外的数据参与转换所得结果不正确。函数对传入的实参进行判断符号,并设定转换起始位置以避开其符号,之后将字符串、起始位置、字符串长度作为参数传递给cha()函数进行数值转换,获得其long类型返回结果后将结果添加符号后返回给调用程序。 //double cha(char in[], int begin, int length) //参数为字符串、起始位置、字符串长度。在函数中会对字符串中字符进行判断是否为数字,如果是数字则进行计算,返回long类型的数据,如果发现非数字字符则强制退出程序。程序正常返回结果为字符串转换后所得long类型的数据。 // By 陈志东 From 南京工业大学外语学院 // 2010年7月12日 long cha(char in[], int begin, int length){ int a; long tmp; tmp=0; for(a=begin;a<length;a++){ if(in[a]>='0' && in[a]<='9'){ tmp=10*tmp+(in[a]-'0'); } else{ //printf("It's not a integer\n"); exit(1); } } return tmp; } long str2l(char src[]){ int i,len; long result=0; len=strlen(src); if(src[0]=='-'){ result=cha(src,1,len)*(-1); } else if(src[0]=='+'){ result=cha(src,1,len); } else{ result=cha(src,0,len); } return result; } //End
以下是测试函数:
#include <stdio.h> #include "str2l.h" int main(int argc,char * argv[]){ if(argc!=2){ printf("Plus a number no more than 22 digits after the CMD!\n"); return 0; } long tmp; tmp=str2l(argv[1]); printf("the finale answer is %ld\n",tmp); return 0; } //End
如果你有更强劲更简单的方法,欢迎留言告知,感激不尽!
上一篇: C语言计算两个日期间的天数下一篇: 用Aircrack-ng破解无线节点WEP加密的脚本
atol,atof,_atoi64不是可以处理大数据吗?