1.atoi函数
atoi函数的作用是把一个字符串换成一个整型数据,该函数包含于头文件#include<stdlib.h>中。
1.空字符返回数字0;
2.数字字符前有空白字符跳过;
3.数字字符前有+、-号,做整数类型的正负处理;
4.数字字符前有其他字符返回0;
简单举例:
#include <stdio.h>
#include<stdlib.h>
int main() {char arr1[] = ""; //输出0char arr2[] = " 123"; //输出123char arr3[] = " -123"; //输出-123char arr4[] = " +123"; //输出123char arr5[] = "abc123"; //输出0char arr6[] = "abc123zb";//输出0int a1 = atoi(arr1);int a2 = atoi(arr2);int a3 = atoi(arr3);int a4 = atoi(arr4);int a5 = atoi(arr5);int a6 = atoi(arr6);printf("%d\n%d\n%d\n%d\n%d\n%d",a1,a2,a3,a4,a5,a6);return 0;
}
结果展示:
2.模拟使用atoi函数
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
int my_atoi(char* str) {assert(str);//空指针if (*str == '\0')return 0;while (*str == ' ') {//跳过空格str++;}int a = 1,num=0;if (*str == '+') {//判断正负str++;}else if (*str == '-') {//判断正负a = -1;str++;}long long n = 0;while (isdigit(*str)) {num = *str - '0';n = n * 10 + a * num;if (n > INT_MAX || n < INT_MIN)return 0;str++;}if (*str == '\0') {return (int)n;}return (int)n;
}
int main() {char arr1[] = ""; //输出0char arr2[] = " 123"; //输出123char arr3[] = " -123"; //输出-123char arr4[] = " +123"; //输出123char arr5[] = "abc123"; //输出0char arr6[] = "abc123zb";//输出0printf("%d\n%d\n%d\n%d\n%d\n%d", my_atoi(arr1),my_atoi(arr2),my_atoi(arr3),my_atoi(arr4),my_atoi(arr5),my_atoi(arr6));return 0;
}
结果展示:
3.itoa函数
itoa函数的作用是将一个整数转换成字符串。该函数包含于头文件#include<stdlib.h>中
用法:itoa(整型数据,目标字符串,进制)
而在vs 中要使用— _itoa函数才行。
简单举例:
#include<stdio.h>
#include<stdlib.h>
int main()
{int n = 123;char num1[20] = { 0 };char num2[20] = { 0 };char num3[20] = { 0 };char num4[20] = { 0 };_itoa(n, num1, 10);//将整型的n转为十进制的字符数字存储在num中为123_itoa(n, num2, 2);//将整型的n转为二进制的字符数字存储在num中为1111011_itoa(n, num3, 8);//将整型的n转为八进制的字符数字存储在num中为1111011_itoa(n, num4, 16);//将整型的n转为十六进制的字符数字存储在num中为1111011printf("%s\n%s\n%s\n%s", num1,num2,num3,num4);return 0;
}
结果展示:
4.模拟使用itoa函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
void my_itoa(int num, char* str, int radix){char* left = str;int flag = num;if (num < 0) //考虑到负数的情况num = -num;while (num > 0){*str++ = num % radix + '0';num /= radix;}if (flag < 0){*str++ = '-';}*str = '\0';//此时是逆序存放的,需要翻转过来char* right = str - 1;while (left < right){char tmp = *left;*left = *right;*right = tmp;++left;--right;}}
int main()
{int n = 123;char num1[20] = { 0 };char num2[20] = { 0 };char num3[20] = { 0 };char num4[20] = { 0 };my_itoa(n, num1, 10);//将整型的n转为十进制的字符数字存储在num中为123my_itoa(n, num2, 2);//将整型的n转为二进制的字符数字存储在num中为1111011my_itoa(n, num3, 8);//将整型的n转为八进制的字符数字存储在num中为173my_itoa(n, num4, 16);//将整型的n转为十六进制的字符数字存储在num中为7pprintf("%s\n%s\n%s\n%s", num1,num2,num3,num4);return 0;
}
结果展示: