《程序员面试宝典》 第十四章 14.1
整数转字符串
1、考虑情况:整数为负、整数为0
2、需要逆序输出
char * itoa(int num,char *str)
{
assert(NULL != str);
int j=0;
if(num==0) //为0时
{ str[j++] = '0';
str[j] = '\0';
return str; }
if(num < 0)
{ str[j++] = '-';
num=-num; }
char temp[100];
int k=j;
while(num)
{
temp[k++]=num%10 + '0';
num/=10;
}
k--;
int i=j;
while(k >= i)
{
str[j++]=temp[k--];
}
str[j]='\0';
return str;
}
程序员面试宝典》 第十四章 14.2
字符串数转整数 num=num * 10+(str[i]-'0');
考虑情况:字符串带符号、字符串中有非法字符
int atoi(string &str)
{
assert(!(str.size()<1));
int n=str.size();
int num=0;
int j=0;
int flag=1;
if(str[0]=='-') {j=1;flag=-1;}
for(int i=j;i<n;i++)
{
assert((str[i]>='0' && str[i]<='9'));
num=num*10+(str[i]-'0');
}
return flag*num;
}
int main()
{
int num=123876545;
int num1=-23467;
char s1[100],s2[100];
string s=itoa(num,s1);
string ss="-123764";
cout<<s<<endl;
cout<<atoi(s)-1<<endl;
cout<<atoi(ss)<<endl;
cout<<itoa(num,s1)<<endl;
cout<<itoa(num1,s2)<<endl;
return 0;
}