您的位置:首页 > 编程语言 > C语言/C++

C语言实现的 itoa(int num, str *temp, int radix) 与 atoi(str *temp)

2012-05-07 17:26 399 查看
/*
* file name : my_itoa.c
* function  : achieve itoa and atoi
* date      : 2012-5-3
* modify    : 2012-5-7
* author    : gaoxiang
*/

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

int my_atoi(const char *str);

int main (void)
{

int i = -10;
char str[50];

my_itoa(i,str,2);
printf("%s\n",str);

//	printf("%d",my_atoi("-87"));

return EXIT_SUCCESS;
}

/*function: my_itoa()*/

int my_itoa(int num, char *str, int radix)		/*可以用sprintf(str,"%x",100)*/
{
int  sign = 0;
char *temp = str;

int i = 0;
int j = 0;

if (num == 0)								/*处理0*/
{
*temp = '0';
*(temp+1) = '\0';
return 1;
}

(num < 0) ? (sign = -1) : (sign = 1);		/*处理负数*/

(sign == -1) ? (num = -num) : (num = num);

while(num > 0){								/*求余,算出每一位的值*/
*temp++ = "0123456789abcdef"[num%radix];
num /= radix;
}

*temp = '\0';								/*构成字符串*/

temp = str;									/*重置指针*/

j = strlen(temp)-1;							/*设置交换边界*/

if (sign == -1){

temp[++j] = '-';						/*增加负号标志*/
temp[j+1] = '\0';

while (i<j){									/*逆制并且写入符号*/
temp[i] = temp[i]^temp[j];
temp[j] = temp[i]^temp[j];
temp[i] = temp[i]^temp[j];
i++;
j--;
}

}else{

while (i<j){									/*逆制并且写入符号*/
temp[i] = temp[i]^temp[j];
temp[j] = temp[i]^temp[j];
temp[i] = temp[i]^temp[j];
i++;
j--;
}

}

//"0123456789abcdef"[num%]
}

/*function: my_atoi()*/
int my_atoi(const char *str)
{
int num = 0;
int sign = 0;

assert(str != NULL);						/*下断言*/

while(*str++ == ' ');						/*初步实现跳过空格*/

str--;										/*回退一个字符*/

(*(str) == '-') ? (sign = -1,str++) : (sign = 1);

while (*str++ != '\0')
num = (*(str-1)-'0') + (num*10);		/*数值计算*/

(sign != -1) ? (num = num): (num = -num);

return num;

}


1.思路

itoa : 首先判断正负,然后判断是否为零,接着用给出的数求余,存储到给定指针里面,接着将该数除以进制数,最后根据正负对字符串进行逆序,如果为负,则把字符串的最后一个字符即‘\0’置为‘-’,然后把‘-’字符后面的那个字符置为‘\0’,紧接着利用移位操作,原地进行交换字符。这样就可以实现。

atoi :首先要判断字符串的可存在性,然后滤过空格等空字符,接着判断正负,最后利用num = num+ *str[i]-‘0’ 求得num的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: