有些库中有atoi()函数,但没有itoa()函数,怎么办?自己写啊!!!
一:先来看看库atoi()函数和itoa()函数的用法:
1.atoi 是把字符串转换成整型数的一个函数,int atoi(const char *nptr) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束符('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。
代码实现如下:
//vs2013里调用printf函数请使用预处理命令#define _CRT_SECURE_NO_WARNINGS
int main()
{char a[] = "-100";char b[] = "123";int c;c = atoi(a) + atoi(b);printf("c=%d\n", c);getchar();return 0;
}
2.itoa 为c语言的一个函数。itoa 函数是一个广泛应用的,从非标准扩展到标准的C语言。它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许其通过header ,因为它是一个从逻辑对应到标准库的函数。itoa 取整数输入值,并将其转换为相应进制数字的字符串。
char *itoa( int value, char *string,int radix);
原型说明:
value:欲转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等。
功能:
把一个整数转换为字符串
代码实现如下:
int main(void)
{int number = 12345;char string[32];itoa(number, string, 10);printf("integer = %d \nstring = %s\n", number, string);getchar();return 0;
}
二:自己来实现itoa()函数和atoi()函数
1.自己来实现itoa,直接上代码:
void my_itoa(long i, char *string)
{int power = 0, j = 0;j = i;for (power = 1; j>10; j /= 10)power *= 10;for (; power>0; power /= 10){*string++ = '0' + i / power;i %= power;}*string = '\0';printf("%s\n", string);
}
int main()
{char string[20];long timestamp = 1526567094;my_itoa(timestamp, string);printf("%s\n", string);getchar();return 0;
}
2.1.自己来实现atoi,直接上代码:
//char *a = "12345";//是一个char *型变量,位于常量存储区 不可更改指针指向的数据
//char a[] = "12345";//一个char型数组
int my_atoi(char *str)
{if (!str)return -1;bool bMinus = false;int result = 0;if (('0'>*str || *str>'9') && (*str == '+' || *str == '-')){if (*str == '-')bMinus = true;*str++;}while (*str != '\0'){if ('0'> *str || *str>'9')break;elseresult = result * 10 + (*str++ - '0');}if (*str != '\0')//no-normal end return -2;return bMinus ? -result : result;
}
int main(void)
{char c1[] = "12345";char c2[] = "-12345";char c3[] = "bat-123";char c4[] = "+123abc";printf("c1=%d\n", my_atoi(c1));printf("c2=%d\n", my_atoi(c2));printf("c3=%d\n", my_atoi(c3));printf("c4=%d\n", my_atoi(c4));getchar();return 0;
}