1.设计一个itoa函数,将整数n变成字符串数组存储并打印出来
#include <iostream>
using namespace std;
void itoa(int n,char* res)
{
int flag=1;
int i=0,j=0;
char buf[100]="";
if(n<0)
res[i++]='-';//如果是负数,第一位就是‘-’,不是的话这句话不执行
n=abs(n);
while(n)
{
buf[j++]=n%10+'0';
n=n/10;
}
j--;
while(j>=0)
res[i++]=buf[j--];//倒序赋值给res
}
int main()
{
int num;
char res[10]="";
cin>>num;
itoa(num,res);
cout<<res<<endl;
return 0;
}
需要注意的是在定义字符串数组时我们要将其初始化
如char res[10]="";
不置空的话res[10]中存储的是一堆垃圾字符,其内存空间也未知,这样我们在转化完成输出res时会得到乱码
同样的函数中buf也得初始化
另外的,我们也可以用char*型存储
但我们必须给该指针分配内存空间
char* res=new char[100];
不分配的后果会比字符串数组更为严重,你甚至无法得到结果
此外当然可以使用Windows自带的转换函数,sprintf将数字转换为字符串
这个不是C标准库中的函数,而是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:
char str[255];
sprintf(str, "%x", 100); //将100转为16进制表示的字符串。
2. atoi 实现字符串转int型
#include<iostream>
#include<string>
#include<math.h>
const int N=100;
const int NU=0;
const int FALSE=-1;
using namespace std;
int atoi(const char* a){
int i,k,s=0;
if(strlen(a)==0)
return NU;
if((a[0]!='-'&&a[0]!='0')||strlen(a)==1)//十进制
{ for(i=0;i<strlen(a);i++)
{ k=a[i]-'0';
s+=k*pow(10,strlen(a)-i-1);
}
return s;
}
else if(a[0]!='-'&&a[0]=='0'&&a[1]!='x')//八进制
{ for(i=0;i<strlen(a);i++)
{ k=a[i]-'0';
s+=k*pow(8,strlen(a)-i-1);
}
return s;
}
else if(a[0]!='-'&&a[0]=='0'&&a[1]=='x')
{ for(i=strlen(a)-1;a[i]!='x';i--)
{ if(a[i]>='A')
{k=a[i]-'A'+10;
}
else k=a[i]-'0';
s+=k*pow(16,strlen(a)-i-1);
}
return s;
}
else if(a[0]=='-'&&a[1]!='0')
{ for(i=1;i<strlen(a);i++)
{ k=a[i]-'0';
s+=k*pow(10,strlen(a)-i-1);
}
return -s;
}
else if(a[0]=='-'&&a[1]=='0'&&a[2]!='x'){
for(i=2;i<strlen(a);i++)
{ k=a[i]-'0';
s+=k*pow(8,strlen(a)-i-1);
}
return -s;
}
else if(a[0]=='-'&&a[1]=='0'&&a[2]=='x'){
for(i=strlen(a)-1;a[i]!='x';i--)
{ if(a[i]>='A')
{k=a[i]-'A'+10;
}
else k=a[i]-'0';
s+=k*pow(16,strlen(a)-i-1);
}
return -s;
}
else return FALSE;
}
int main()
{char str1[N],str2[N],str3[N];
int t;
cin>>str1;
t=atoi(str1);
cout<<t<<endl;
cin>>str2;
t=atoi(str2);
cout<<t<<endl;
cin>>str3;
t=atoi(str3);
cout<<t<<endl;
}
c和c++中8进制默认以0开头,16进制默认以0x(x不区分大小写)开头
atoi函数实现对10 8 16进制形式数字字符串的int型转换
char* 和char []在用法上有很多相似 在一般情况下
void test(int n,char str[]和(int n,char* str)