我们写程序的时候经常会遇到整型和字符串相互转换的问题:
下面的程序包含库函数和自己写的转换函数:
#include"stdio.h"
#include"stdlib.h"
//将整型数转化为一个字符串
void my_itoa(int n,char s[])
{
int i=0;
int j,sign;
char c;
if((sign=n)<0)//记录符号
n=-n;//使n成为正数
do{
s[i++]=n%10+'0';//取下一个数字
}while((n/=10)>0);//删除该数字
if(sign<0)
s[i++]='-';
s[i]='\0';
j=i-1;
i=0;
while (i<j)
{
c=s[i];
s[i]=s[j];
s[j]=c;
i++;
j--;
}
}
//字符串,如果第一个字符不是数字也不是正负号返回零,否则开始做类型转换。
//之后检测到非数字或结束符 \0 时停止转换,返回整型数。
int my_atoi(const char *str)
{
int temp=0;
const char *ptr=str;
while(*str==' ')
{
str++;
ptr++;
}
if(*str=='-'||*str=='+')
{
str++;
}
while(*str!='\0')
{
if((*str<'0')||(*str>'9'))
{
break;
}
temp=temp*10+(*str-'0');
str++;
}
if(*ptr=='-')
{
temp=-temp;
}
return temp;
}
int main()
{
int n;
char s[100];
char *str="12sdfg34sd56ad";
printf("请输入一个整数:\n");
scanf("%d",&n);
my_itoa(n,s);
printf("整数转换为字符串:\n");
printf("itoa输出的值为%s:\n",itoa(n,s,10));
printf("my_itoa函数输出的值为%s:\n",s);
printf("\n");
printf("字符串转换为整数:\n");
printf("atoi输出的值为%d:\n",atoi(str));
printf("my_atoi函数输出的值为%d:\n",my_atoi(str));
return 0;
}