这是我在写一个百度之星题目时顺带写出来的,因为不满足原来的函数所以想要自己写个,代码如下,里面对函数也都有说明,有任何问题请留言,谢谢! 我用的是Arch Linux系统,vim编辑,gcc编译。 #include <string.h> #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