算法--写一个函数检查字符是否是整数,如果是返回其整数值

     基础知识补充,对于一个给定的数字字符x,比如x=‘6’,如何求x所对应的数字6呢?我们知道计算机存储字符实际上存储的是其ASCII码,对于字符x=‘6’实际上存储的是ASCII码54,字符‘0’是48,‘1’是49.这样以来,对于任意一个数字字符x我们可以通过x-'0'的方式来求救其对于的数字值.

     下面分析一下如何求解字符串对于的数值.不失一般性,我们不妨以str="9652"作为例子分析。str对应的数值应为9652,如何和求解?一种直观的方法是取第一个数字9,让9与10^3相乘得乘积积,再取出6,让6与10^2相乘得乘积,最后把这些乘积加起来。这种办法需要求10的幂,应该摒弃,另寻更好的办法。可是怎么办呢?

     取出第一个数9,先临时把它看做最终结果r,再取出6,这里我们注意到r比6是高一位的,要想得到96只需9*10+6即可.那么就有递推式r=r*10+c,其中c为当前位对应的数值。根据这种思想我们可以得到递归算法:

long atoi(char *str,int length){
	if(length>1){
		return str[0]=='-'?atoi(str,length-1)*10-(str[length-1]-'0'):atoi(str,length-1)*10+(str[length-1]-'0');
	}else
		return (str[0]=='-'||str[0]=='+')?0:str[0]-'0';
}

这里要注意要考虑到正号的情况,这种方法没有处理非数字字符问题有待于进一步的完善。

    非递归改进后的可容错代码如下:

long atoi(char *str,int length){
	int i=0,sign=1,result=0;
	if(str==NULL&&length<1)
		return -1;
	if(str[0]=='-')
		sign=-1,i++;
	else if(str[0]=='+')
		i++;
	//注意,这里一定要加上“i
但是方法在出错时返回-1,如果字符串本身就是-1得到的结果也是-1,那我们如何去区分呢?至今,我没有想到有什么办法解决,请大家不惜吝教!

你可能感兴趣的:(算法,C)