C语言基础-itoa和atoi函数的使用和自己实现
来源:互联网 发布:npm 淘宝镜像安装教程 编辑:程序博客网 时间:2024/05/16 08:34
序言
整型数转字符,或者字符转整型数是编程中比较常见的类型转换。
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
阅读全文
0 0
- C语言基础-itoa和atoi函数的使用和自己实现
- 自己实现C语言atoi函数和线程安全版的itoa函数
- 函数 atoi() 和 itoa() 的 C 语言实现。
- C语言atoi()和itoa()函数的实现
- c语言基础函数——itoa()和atoi()
- C语言itoa()函数和atoi()函数
- C语言itoa()函数和atoi()
- C语言函数itoa() 和atoi() 详解
- C实现atoi()函数和itoa()函数
- 自己编写代码实现atoi和itoa函数的功能
- 自己编写代码实现atoi和itoa函数的功能
- C语言实现atoi,itoa和atof
- c语言实现itoa和atoi
- C语言中itoa和atoi函数的用法
- c函数itoa和atoi实现
- c函数itoa和atoi实现
- c函数itoa和atoi实现
- c语言 atoi 和 itoa 的写法
- Cow Contest
- EU4-52: Discussing possible solutions
- Dijstra算法的Python实现
- C++Regex库安装小结
- PAT乙级1012. 数字分类 (20)
- C语言基础-itoa和atoi函数的使用和自己实现
- 硬币问题(经典dp)
- C++Lambda表达式详解
- POJ1182食物链
- 安装mysql
- 【hpu oj 1019 985的买饮料难题 [数学、DP]】
- POJ2502 subway(spfa)
- <8>——String to Integer (atoi)
- CodeForces 118 A.String Task(水~)