C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下分别用my_atoi()函数将字符串转换为对应的整数,用itoa()函数将整数转换为字符串的。

       atoi     把字符串转换成整型数
       itoa     把一整数转换为字符串

1、实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。

比如:输入字符串“1234”,返回数字1234。

      输入字符串“+1234”,返回数字1234.

      输入字符串“-1234”,返回数字-1234.

代码如下:

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

int my_atoi(char *p)
{
	int flag=1,rav=0;
	assert(p);
	while(isspace(*p))//判断指针是否为空白字符
	{
		*p++;
	}
	if(*p=='-')
	{
		flag=-1;//flag保存符号正负
	}
	if(*p=='-'||*p=='+')//如果有符号位后移
	{
		p++;
	}
	while(*p)//依次将数字中每一位赋给rav,此判断条件等价于while(*p!='\0')
	{
		if((*p>='0')&&(*p<='9'))
		{
			rav=rav*10+(*p-'0');//*p-'0'是每一次取出来的数字
		}
		p++;
	}
        return flag*rav;//返回符号和数字的积
}
int main()
{
	char str[10];
        gets(str);//输入一个字符串
	printf("%d\n",my_atoi(str));
	system("pause");
	return 0;
}

2、实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中。

代码如下:

#include<stdio.h>
#include<stdlib.h>

void reverse(char str[],int len)//逆序整个字符数组
{
	int left=0;
	int right=len-1;
	while(left<right)
	{
		char temp=str[left];
		str[left]=str[right];
		str[right]=temp;
		left++;
		right--;
	}
}

void itoa(int num, char str[])
{
    int i=0,j,flag;
    flag=num;//flag保存符号
    if(num<0)//如果输入的数字为负数时,转化成正数
     	num=-num;	
    while(num)
    {
		str[i++]=num%10+'0';//数字逆序存入字符数组中
	    num/=10;
	}
    if(flag<0)
	{
		str[i++]='-';//字符数组中存入符号
	}
    str[i]='\0';
    reverse(str,i);
}

int main(void)
{ 
	char str[20];
	int num;
        scanf("%d",&num);
	itoa(num,str);
	printf("%s\n",str);
    system("pause");
    return 0;
}