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;
}
转载于:https://blog.51cto.com/luoyafei/1709806