您的位置:首页 > 编程语言 > C语言/C++

(原创)C语言用于将字符串转换成长整型的函数,比原来的函数强劲

2010-08-06 18:52 344 查看
这是我在写一个百度之星题目时顺带写出来的,因为不满足原来的函数所以想要自己写个,代码如下,里面对函数也都有说明,有任何问题请留言,谢谢!

我用的是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐