【13】编写实现atoi函数

题目:给定一个字符串,要求转成整数,不允许使用atoi或者其它类似库函数。

方案:实现这个函数并不难,但是要考虑以下几个问题

           1.考虑字符串为空指针的时候
           2.考虑字符串为空串
           3.考虑是否有+/-符号
           4.考虑是否有不合法的字符
           5.考虑结果是否会溢出

const int MAXN = 2147483647;
const int MIN = -2147483648;
bool isOk;

//atoi函数,不合法情况isOk为false,返回0
int StrToInt(char *string){
	if(string == NULL){ //空指针
	    isOk = false;
		return 0;
	}
	isOk = true;
	int len = strlen(string);
	//空串
	if(len == 0){
	    isOk = false;
		return 0;
	}
	//
	long long sum = 0;
	bool flag = false;
	//判断+和-符号
	if(string[0] == '+' || string[0] == '-'){
	     flag = true;
	}
	//求值
	for(int i = 0; i < len; i++){
		if(i == 0 && flag){ //如果是+和-符号
		    continue;
		}
		if(string[i] >= '0' && string[i] <= '9'){
		    sum = sum*10 + string[i]-'0';
		}
		else{
		    isOk = false;
			return 0;
		}
		if(sum > MAXN || sum < MIN){ //值溢出的情况
		    isOk = false;
			return 0;
		}
	}
	//有符号的时候处理
	if(flag){
		if(len == 1){
		    isOk = false;
			return 0;
		}
		if(string[0] == '-'){
		    sum *= -1;
		}
	}
	return (int)sum; //long long转int
}
时间: 2024-10-26 21:56:20

【13】编写实现atoi函数的相关文章

代码-VS编写的GMM函数,效率问题

问题描述 VS编写的GMM函数,效率问题 5C 问一下,大家运行OPENcv时, 效率怎么样?主要是CPU和内存的占有量.我近期在window平台上,运行一个GMM程序,(是公司提供的库函数,我只是进行简单的调用),CPU占用25%,内存占用11.136K.请问一下:1.通常怎么优化代码么,可以从哪些角度入手?2.怎么评估代码的好坏?我的机器:处理器:Intel(R) Core(TM) i3-4160 CPU@3.6GHZ内存:4.00GB(3.87GB可用)系统:64位操作系统(window7

用 PHP 开发健壮的代码(三):编写可重用函数

函数 在本系列文章(有关如何在实际情况下开发有效的 PHP 代码)的第 3 部分中,Amol Hatwar 讨论了如何构建最有效的功能型函数,使用这些函数不会牺牲太多性能或可管理性.作者重点阐述了如何编写可重用函数,并介绍了如何避免与该任务相关的一些最常见问题.欢迎回来.在本系列文章的第 1 部分中,我讨论了一些基本的 PHP 设计规则,并介绍了如何编写安全.简单.与平台无关且快速的代码.在第 2 部分中,我介绍了变量,并讨论了它们在 PHP 编码中的用法 - 好的和坏的实践. 在本文中,您将了

用 PHP 开发健壮的代码:编写可重用函数,第3部分

在本系列文章(有关如何在实际情况下开发有效的PHP代码)的第3部分中,Amol Hatwar讨论了如何构建最有效的功能型函数,使用这些函数不会牺牲太多性能或可管理性.作者重点阐述了如何编写可重用函数,并介绍了如何避免与该任务相关的一些最常见问题. 欢迎回来.在本系列文章的第1部分中,我讨论了一些基本的PHP设计规则,并介绍了如何编写安全.简单.与平台无关且快速的代码.在第2部分中,我介绍了变量,并讨论了它们在PHP编码中的用法 - 好的和坏的实践. 在本文中,您将了解如何在PHP中明智地使用函数

vb-VB中的InStr在C#中有什么表示?或者怎么编写一个InStr函数?Mid函数呢?

问题描述 VB中的InStr在C#中有什么表示?或者怎么编写一个InStr函数?Mid函数呢? VB翻译成C#的问题,VB中的InStr在C#中有什么表示?或者怎么编写一个InStr函数?Mid函数呢? 解决方案 instr函数,string.indexof mid函数,string.substring 解决方案二: InStr 函数VB InStr函数 解决方案三: c#中indexof

指针-atoi函数代码怎么理解?

问题描述 atoi函数代码怎么理解? int myatoi(const char* sptr) { bool ispnum=true; int ans=0; if(*sptr=='-')//判断是否是负数{ ispnum=false; sptr++; } else if(*sptr=='+')//判断是否为正数{ sptr++; }while(*sptr!='')//类型转化{ ans=ans*10+(*sptr-'0'); sptr++; }if(ispnum) return ans; els

用c语言编写一个数组排序函数 要求如下

问题描述 用c语言编写一个数组排序函数 要求如下 1.既能从小到大也能从大到小 2.对int,unsigned int,const int,double 等类型数组都适用 3.尽量简洁 解决方案 参考系统函数qsort的实现.允许用户传一个比较函数指针.各种类型,按照大小排序,都由用户传这个比较函数实现.这样就通用了. 解决方案二: 你去搜,c 模板 排序,能搜到 解决方案三: 你是刚刚学习C语言么?你现在想要的是一段严格规范的代码,还是说一种编程的思路,又或者,只是为了应付一下某个任务?

《C和C++代码精粹》——2.13 指向成员函数的指针

2.13 指向成员函数的指针 C和C++代码精粹如果返调函数是某个类的成员函数将会怎样?获得指向类成员的指针与获得指向非成员实体的指针的方式相似,只存在很小的语法变化.例如,考虑下面类的定义: class C { public: void f ( ) {cout << "C::f\n";} void g( ) {cout << "C::g\n";} }; 可以这样定义一个指向C类成员函数的指针: void (C::*pmf) ( ); //

C语言数字与字符串转换 atoi()函数、itoa()函数、sprintf()函数

在编程中经常需要用到数字与字符串的转换,下面就总结一下. 1.atoi() C/C++标准库函数,用于字符串到整数的转换. 函数原型:int atoi (const char * str); 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main () 4 { 5 char *numchars="1234"; 6 int num=atoi(numchars); 7 printf("%d\n"

自己实现的atoi()函数

函数描述:    将字符串str转换成一个整数并返回结果.参数str 以数字开头,当函数从str 中读到非数字字符则结束转换并将结果返回. int atoi( const char *str ){    if (str == 0 ) return 0;        int nRet = 0;    int nLen = 0;    bool bSign = true;    bool bFlag = false;        nLen = strlen(str);    if (nLen =