您的位置:首页 > 其它

【练习题】atoi和itoa函数的实现

2015-06-19 00:08 323 查看
int atoi (const char * str);   //Convert string to integer

char *  itoa ( int value, char * str, int base );  //Convert integer to string (non-standard function)

#include <stdio.h>
#include <ctype.h>

int my_atoi(const char *s)
{
	int i =0;
	int total = 0;
	int sign;

	while(isspace(*s)) //跳过空白符
		s++;

	sign = *s;
	if(*s == '+' || *s == '-') //跳过符号位
	{
		s++;
	}
	while(isdigit(*s))
	{
		total = 10*total + (*s - '0'); //将数字字符转换成整形数字
		s++;
	}

	if(sign == '-')
		return -total;
	else
		return total;
}

int main(void)
{
	char str[256];
	printf ("Enter your a numeric string: ");
	scanf("%s",str);
	printf("%d\n",my_atoi(str));
}
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

char *my_itoa(int value, char * str, int base)
{
	int sign,ch;
	int i,len;
	char *tmp = str;
	char c;
	unsigned uvalue;

	if(base > 36 || base <=1)
	{
		printf("Base is between 2 and 36\n");
		return 0;
	}

	sign = (base == 10 && value < 0);
	if(sign) //记录符号,使value为正数
		uvalue = -value;
	else
		uvalue = (unsigned)value;

	while(uvalue)
	{
		ch = uvalue%base;
		uvalue = uvalue/base;
		if(ch < 10)
			*tmp = ch + '0'; // 0-9 直接输出"0"-"9"
		else
			*tmp = ch - 10 + 'a'; // > 10 输出"a"-...
		tmp++;
	}
	if(sign)
		*tmp++ = '-';
	*tmp = '\0';

	//生成的数字是逆序的,所以要逆序输出
	len = strlen(str);
	for(i=0;i<len/2;i++)  //首尾交换,共计 len/2 次
	{
		c = str[i];
		str[i] = str[len-i-1];
		str[len-i-1] = c;
	}
	return str;
}

int main(void)
{
	int value,base;
	char str[100];
	while(1)
	{
		printf("please input a number and base:");
		scanf("%d %d",&value,&base);
		printf("my_itoa:%s\n",my_itoa(value,str,base));
		printf("itoa:%s\n",itoa(value,str,base));
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: