1.atoi函数
atoi函数的作用是把一个字符串换成一个整型数据,该函数包含于头文件
#include<stdlib.h>
中。
1.空字符返回数字0;
2.数字字符前有空白字符跳过;
3.数字字符前有+、-号,做整数类型的正负处理;
4.数字字符前有其他字符返回0;
简单举例:
#include <stdio.h>
#include<stdlib.h>
int main() {
char arr1[] = ""; //输出0
char arr2[] = " 123"; //输出123
char arr3[] = " -123"; //输出-123
char arr4[] = " +123"; //输出123
char arr5[] = "abc123"; //输出0
char arr6[] = "abc123zb";//输出0
int 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[] = ""; //输出0
char arr2[] = " 123"; //输出123
char arr3[] = " -123"; //输出-123
char arr4[] = " +123"; //输出123
char arr5[] = "abc123"; //输出0
char arr6[] = "abc123zb";//输出0
printf("%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中为1111011
printf("%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中为123
my_itoa(n, num2, 2);//将整型的n转为二进制的字符数字存储在num中为1111011
my_itoa(n, num3, 8);//将整型的n转为八进制的字符数字存储在num中为173
my_itoa(n, num4, 16);//将整型的n转为十六进制的字符数字存储在num中为7p
printf("%s\n%s\n%s\n%s", num1,num2,num3,num4);
return 0;
}
结果展示:
版权声明:本文为weixin_63779802原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。