序言
整型数转字符,或者字符转整型数是编程中比较常见的类型转换。
itoa()函数和atoi()函数并非标准C库函数,大多数编译器的stdlib.h库中包含,如果没有的话需要自己实现。
1. itoa()
函数原型:char *itoa(int value, char *string, int radix);
- value:要转换的整型数
- string:存储字符串的数组地址
- radix:进制。2~36进制
功能及返回值:
- 将一整型数转换为字符串
- 返回指向string的指针
应用举例:
//实现2048的2-36进制输出
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int num = 2048;
char str[12]; //转换为二进制最多也才11位数字,然后转换为字符
int i;
for (i = 2; i <= 36; i++)
{
itoa(num, str, i);
printf("%s\n", str);
}
return 0;
}
函数自己实现:
- 如果库函数中不自带该函数,需要自己实现
/* 整型数转任意进制字符串 */
#include <stdio.h>
char *itoa(int value, char *string, int radix)
{
//原来的整型数可能是任意进制,如果只是十进制等就不需要定义该数组
char reserve[37] = "0123456789abcdefghijklmnopqrstuvwxyz";
char temp[100] = {0};
//错误检测
if (radix < 2 || radix > 36)
{
printf("error value\n");
return string;
}
//符号判断
int i, j, sign; //字符串计数
if ((sign = value) < 0) //负数也处理
value = -value; //转换为正数
//开始转换
i = 0;
while (value > 0)
{
temp[i++] = reserve[value%radix];
//temp[i++] = value%radix - '0'; //不行
value = value / radix;
}
//符号位
if (sign < 0)
{
temp[i] = '-';
j = i;
}
else
j = i - 1;
//逆向输出
for (; j >= 0; j--)
{
*string++ = temp[j];
}
*string = '\0'; //字符串结束符
return string;
}
int main (void)
{
int num = -2048;
char str[100]; //转换为二进制最多也才11位数字,然后转换为字符
int i;
for (i = 2; i <= 36; i++)
{
itoa(num, str, i);
printf("%s\n", str);
}
return 0;
}
2. atoi()
函数原型:int atoi(const char *str);
功能:将字符串转换为整型数输出
头文件:stdlib.h
返回值:
- 成功:返回整型数
- 失败:比如无法转换为int类型的值,返回0(所以无法区分转换失败还是转换本身就是0)
应用举例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1[] = "123";
char str2[] = "-100";
printf("%d", atoi(str1) + atoi(str2));
return 0;
}
函数自己实现:
- 如果库函数中不自带该函数,需要自己实现
#include <stdio.h>
#include <ctype.h> //for isspace() or isdigit()
int isspace(int c)
{
if (c == ' ' || c == '\r' || c == '\t')
return 1;
else
return 0;
}
int atoi(char *string)
{
int integer_sign = 1;
int integer = 0;
if (string == NULL)
return 0;
//判断是否为空格/回车符/制表符
if (isspace(*string))
string++;
//判断正负号
if (*string == '-' || *string == '+')
{
if (*string == '-')
integer_sign = -1;
string++;
}
//数字字符转换成数字:可添加字母字符的转换
//while (*string >= '0' && *string <= '9')
while (isdigit(*string))
{
integer = integer * 10 + (*string - '0');
string++;
}
return integer_sign*integer;
}
int main()
{
char str1[] = "-123";
char str2[] = "a";
printf("%d", atoi(str1) + atoi(str2));
return 0;
}
Acknowledgements:
http://blog.csdn.net/lanzhihui_10086/article/details/39960027
http://www.cnblogs.com/dudu580231/p/4821954.html
2017.09.02