itoa的用法

功能:将任意类型的整数转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi

用法:char*itoa(int value,char*string,int radix);

int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等,因此可以使用该函数实现十进制转换成二进制或8进制或16进制。

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int number=123456;
	char string[25];
	itoa(number,string,10);
	printf("integer=%d string=%s\n",number,string);
	return 0;
}

那么如何来用自己的语言来写呢?

#include <iostream>
#include <stdio.h>
//将整数转换为十进制字符串,并且不用itoa
int main()
{
	int num=12345;
	int i=0,j=0;
	char str[7],temp[7];
	while (num)
	{
		temp[i++]=num%10+'0';
		num/=10;
	}
   temp[i]='\0';
   i=i-1;
   while (i>=0)
   {
	   str[j++]=temp[i--];
   }
   str[j]='\0';
   printf("string=%s\n",str);
   return 0;
}
方法是先加‘0’,再逆序的办法,整数加'0'就会隐形的转换为char型的数。

但需要注意的是:负整数不能通过itoa被转化为二进制、八进制、十六进制,而正整数可以。请看如下的代码:

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

void main()
{
  char str[8];  
  int   i=-2;  
  itoa(i,str,2);  
  printf("%d的二进制数为:  %s\n\n",i,str); 
}
vc输出:

-2的二进制数为:  11111111111111111111111111111110

并且出现警示框:

正整数就可以了。

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

void main()
{
  char str[8];  
  int   i=2;  
  itoa(i,str,2);  
  printf("%d的二进制数为:  %s\n\n",i,str); 
  
}

结果:

2的二进制数为:  10

请按任意键继续. . .

上述代码不能实现负整数与0转化为字符串,补充另一种做法:

#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
void int2str(int n,char* str)
//n可以为正整数、0、负整数
{
char temp[10];
if (str==NULL)
{
return;
}
int i=0;
int n2=n>=0?n:-n;//n2为n的绝对值
if (n2==0)
{
temp[i++]='0';
}
while (n2)
{
temp[i++]=n2%10+'0';
n2/=10;
}
temp[i]='\0';
i--;
int j=0;
if (n<0)
{
str[j]='-';
j++;
}
while (i>=0)
{
str[j++]=temp[i--];
}
str[j]='\0';
}
void test(char* testname,int n,char* expected)
{
if(testname!=NULL)
cout<<testname<<" "<<"begins:";
char str[10];
int2str(n,str);
if (strcmp(str,expected)==0)
{
cout<<"passed"<<endl;
}
else
{
cout<<"Failed"<<endl;
}
}
//输入150
void test2()
{
int n;
cin>>n;
test("test1",n,"150");

}
//输入0
void test3()
{
int n;
cin>>n;
test("test2",n,"0");

}
//输入-50
void test4()
{
int n;
cin>>n;
test("test3",n,"-50");

}
void main()
{
test2();
test3();
test4();
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值