论坛首页 编程语言技术论坛

atoi_字符串数字转换为整型

浏览 3187 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-28   最后修改:2010-10-28
C

实现字符串中的数字转换为整型,具体规则见源码注释。gcc编译通过。

 

第一种代码,过程有些繁琐:

#include<stdio.h>

/* 求幂
 * 此处求幂也可以调用math.h中的函数pow(),
 * 编译时添加“-lm”参数。 */
double mypow(double x,double y)
{
	int tmp=1;
	while(y-->0)
	{
		tmp*=x;
	}
	
	return tmp;
}

/* 转化字符串中的数字字符到整数。规则如下:
 * 	1、如果字符串开始是一个字母,则返回零;
 * 	2、否则,把数字字符转换成整型数,直到遇到字母字符为止。
 */
int myatoi(const char *str)
{
	int i=0,j=0,rslt=0;

	if(*str<'0'||*str>'9') return 0;

	while(*str>='0'&&*str<='9')
	{
		str++;
		i++;
	}

	while(i-->0)
	{
		rslt+=(int)mypow(10,j++)*(*--str-'0');
	}

	return rslt;
}

int main()
{
	char *strtest1="a1234",*strtest2="6789d";

	printf("%d\n%d\n",myatoi(strtest1),myatoi(strtest2));

	return 0;
}

 

 

另一段代码,对符号等做出判断,转换思路做出优化:

#include<stdio.h>

/* 转化字符串中的数字字符到整数。规则如下:
 * 	1、如果字符串开始是一个字母,则返回零;
 * 	2、否则,把数字字符转换成整型数,直到遇到字母字符为止;
 * 	3、另有符号空格等的判断。
 */
int myatoi(const char *str)
{
	int sign=1,rslt=0;

	while(' '==*str||'\t'==*str) str++;

	if('-'==*str)
	{
		sign=-1;
		str++;
	}
	else if('+'==*str) str++;

	while('0'==*str) str++;

	if(*str<'0'||*str>'9') return 0;

	while(*str>'0'&&*str<='9')
		rslt=rslt*10+(*str++-'0');

	return sign*rslt;
}

int main()
{
	char *strtest1="  1234",\
		*strtest2="-6789d",\
		*strtest3="+0324dk",\
		*strtest4="0043  5",\
		*strtest5="-s0012";

	printf(\
		"%d\n%d\n%d\n%d\n%d\n",\
		myatoi(strtest1),\
		myatoi(strtest2),\
		myatoi(strtest3),\
		myatoi(strtest4),\
		myatoi(strtest5)\
	);

	return 0;
}
 

 

May contact with me via e-mail: AllenNewOK@126.com

 

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics