字符串转换为整数(atoi)与整数转换成字符串(itoa)的实现

字符串转换成整数思路(atoi):如有空白符,则跳过;如有符号,则记录符号并跳过;取整数部分并执行转换(循环累加)

int myatoi(char str[])
{
    int sign,n,i;
	for(i=0;isspace(str[i]);i++)  //跳过空白符
	 ;
	sign=(str[i]=='-')?-1:1; //检查符号
    if(str[i]=='+'||str[i]=='-') //跳过符号
	   i++;
	for(n=0;isdigit(str[i]);i++) //计数
	   n=10*n+(str[i]-'0'); //这里的'0'可以用0x30代替
    return n*sign;
} 


整数转换成字符串的思路:记录符号,以反序生成数字(先取数再判断下一位数)并存储在字符串数组中,添加符号(末位)之后逆序输出结果


char *myitoa(int n,char str[])
{
	int i;int sign;
	if((sign=n)<0)  //记录符号
		n=-n;  //转化成正数
	i=0;
	do   
	{   //反序生成数字
     	str[i++]=n%10+'0'; //取下一个数字
	}while((n/=10)>0); //先执行语句后执行判断,这里如果使用先判断再执行则会出错噢!
	if(sign<0)
		str[i++]='-';
	str[i]='\0'; 
	assert(str!=NULL);  //判空
	char *s1=str;
	char *s2=str+strlen(str)-1;
	for(;s1



完整代码如下:

#include   
#include   
#include 
using namespace std;  
  
int myatoi(char str[])
{
    int sign,n,i;
	for(i=0;isspace(str[i]);i++)  //跳过空白符
	 ;
	sign=(str[i]=='-')?-1:1; //检查符号
    if(str[i]=='+'||str[i]=='-') //跳过符号
	   i++;
	for(n=0;isdigit(str[i]);i++) //计数
	   n=10*n+(str[i]-'0'); //这里的'0'可以用0x30代替
    return n*sign;
} 

char *myitoa(int n,char str[])
{
	int i;int sign;
	if((sign=n)<0)  //记录符号
		n=-n;  //转化成正数
	i=0;
	do   
	{   //反序生成数字
     	str[i++]=n%10+'0'; //取下一个数字
	}while((n/=10)>0); //先执行语句后执行判断,这里如果使用先判断再执行则会出错噢!
	if(sign<0)
		str[i++]='-';
	str[i]='\0'; 
	assert(str!=NULL);  //判空
	char *s1=str;
	char *s2=str+strlen(str)-1;
	for(;s1


你可能感兴趣的:(C/C++)