字符串(char*)转化为int
2014-02-24 21:24
387 查看
一个精简版本:
long strtoint(char *str,int length)
{
if(length > 1)
return str[0]=='-' ? strtoint(str, length-1)*10-(str[length-1]-'0') : strtoint(str, length-1)*10+str[length-1]-'0';
else
return str[0]=='-' ? 0 : str[0]-'0';
}
一个较完善的版本:
#include <ctype.h> int my_atoi(const char* p) { assert(p != NULL); bool neg_flag = false;// 符号标记 int res = 0;// 结果 if(p[0] == '+' || p[0] == '-') neg_flag = (*p++ != '+'); while(isdigit(*p)) res = res*10 + (*p++ - '0'); return neg_flag ?0 -res : res; }
long strtoint(char *str,int length)
{
if(length > 1)
return str[0]=='-' ? strtoint(str, length-1)*10-(str[length-1]-'0') : strtoint(str, length-1)*10+str[length-1]-'0';
else
return str[0]=='-' ? 0 : str[0]-'0';
}
一个较完善的版本:
#include <iostream> #include <cctype> #include <cassert> using namespace std; #define MAX_INT ((unsigned)(-1) >> 1) //#define MIN_INT (MAX_INT + 1) int Str2Int(const char* pStr) { assert( pStr != NULL ); bool negFlag=false; int ret=0; if (pStr[0]=='+' || pStr[0]=='-') negFlag=(*(pStr++) != '+'); bool flag=true; while(flag) { if(isdigit(*pStr)) { if (!negFlag) { if ( ret*10.0 > MAX_INT -(*(pStr)-'0')) { cout<< "Overflow!"<<endl; assert(false); } } else { if ( ret*10.0 >MAX_INT -(*(pStr)-'0')+1 ) { cout<< "Underflow!"<<endl; assert(false); } } ret= ret*10 + (*(pStr++)-'0'); } else { if (*pStr== '.' || *pStr== '\0') flag=false; else { cout<< "Illegal character!"<<endl; assert(false); } } } return negFlag==true ? (-ret): ret; } int main() { char a[10]="-123.4"; cout<<Str2Int(a)<<endl; char *b="1234"; cout<<Str2Int(b)<<endl; char *d="2147483647"; cout<<Str2Int(d)<<endl; char *e="-2147483648"; cout<<Str2Int(e)<<endl; char *f="-2147483649"; cout<<Str2Int(f)<<endl; char *g="2147483648"; cout<<Str2Int(g)<<endl; char *c=NULL; cout<<Str2Int(c)<<endl; return 0; }32位机 int型有符号整数的范围 -2147483648 ~ 2147483647
相关文章推荐
- char *itoa(int value, char *string, int radix)将整数转化为字符串
- LeetCode—实现字符串转化为int类型的函数
- 将一个int类型的数字转化为字符串,并判断有无重复字符串(长度应大于等于2)有返回1,无返回0
- PHP中将字符串转化为整数(int) intval() printf() 性能测试
- js数租,对象, 数组,字符串,函数,变量,int与String 型转化,String 转化为js 中内部代码,编码格式转化,<a>标签的死链接
- 编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下: Int substr(char dst[], char src[],int start, int len) {} 目标是:从src数组
- 十六进制字符串(CString或char[]) 和 BYTE,char数组 相互转化
- Java中char 转化为int 的两种方法
- 初始加载时把字符串,也就是""转化为int类型
- int转化为char输出
- char与int转化
- char 与 int 转化(位运算)
- String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别
- c++类型转换String^,int,string,char*,时间格式字符串
- cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
- 用C语言实现将int类型转化为字符串,不使用已有的转换函数
- c++的字符串char与string相互转化,以及string的,切割,替换字符,字符串相关的函数整理
- 由object转化为Int类型时,字符串做为中间转化量是有区别的
- CString string char * int double float 之间转化大全
- c++ int转字符串 char转字符串