有些库中有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; else result = 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; }