既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
int ret = atoi§;
printf(“%d\n”, ret);
return 0;
}![](https://img-blog.csdnimg.cn/65c83338afbc4fc9a42c60b70ac90037.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2O6YCi5rqq,size_20,color_FFFFFF,t_70,g_se,x_16)
🎵输入异常情况二:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int main() { const char* p = "123abc"; int ret = atoi(p); printf("%d\n", ret); return 0; }
输入与输出各种情况:
输入:“123” 输出:123
输入:“ 123” 输出:123
输入:“abc123” 输出:0
输入:“123abc” 输出:123
输入:“+123” 输出:123
输入:“-123” 输出:-123
输入:“-abc123” 输出:0
总结:跳过前面空白,找到第一个字符,如果该字符‘+’或者‘-’则读取并跳过该字符,如果第一个非空白字符不是‘+’也不是‘-’则返回0。剩下的被认作数字字符,读到非数字字符停止。
模拟实现atoi
第一步,跳过空白字符。
//跳过空白字符
while (*string == ' ')
{
string++;
}
第二步,读取第一个非空白字符
我们用一个int flag来判断该数字是正数还是负数。
如果第一个非空白字符是+,则我们flag==正1。
如果第一个非空白字符是-,则我们flag== 负1。
if (*string == '+')
{
flag == 1;
}
else if (*string == '-')
{
flag = -1;
}
同时我们还有几个问题没有解决。
第一个问题:“0”返回的是0,异常情况也返回0。该如何区别?
解决:该函数采取的是定义一个全局变量,来判断是正常情况,还是异常情况。
第二个问题:怎么把字符“123”转化成数字123?如何进行算数转换?
解决:
int n = 0;
while(isdigit(*string))
{
n = n * 10 + flag * (*string - '0');
string++;
}
第三个问题:用什么类型的整形存储转换后的数字,可能会有溢出,怎么解决?
解决:用一个long long 类型的整形存储,如果该整形超过INT_MAX或者小于INT_MIN则把它认定异常情况,最后的返回值可以返回0,也可返回(int)n,这个由程序员自己决定。
第四个问题:可能传的string是空指针。
第五个问题:传空字符串,该返回什么?
参考代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
enum State
{
IN_VALID,//0
VALID//1
};
enum State state = IN_VALID;
int my_atoi(const char* string)
{
int flag = 1;
//空指针
if (string == NULL)
{
return 0;
}
//空字符
if (*string == '\0')
{
return 0;
}
//跳过空白字符
while (isspace(*string))
{
string++;
}
if (*string == '+')
{
flag = 1;
string++;
}
else if (*string == '-')
{
flag = -1;
string++;
}
//算数转换
long long n = 0;
while (isdigit(*string))
{
n = n * 10 + flag * (*string - '0');
if (n > INT_MAX || n < INT_MIN)
{
return (int)n;
}
string++;
}
if (*string == '\0')
{
state = VALID;
return (int)n;
}
return (int)n;
}
int main()
{
const char* p = " -123";
int ret = my_atoi(p);
if (state == VALID)
{
printf("合法的:%d\n", ret);
}
else
{
printf("非法的:%d\n", ret);
}
return 0;
}
2.2🔔itoa
itoa()函数把整数转换成字符串,并返回指向转换后的字符串的指针。
itoa是广泛使用的非标准C语言和C++语言扩展功能。但因为它是一个非标准的C / C++语言功能,因此不能好好的被所有编译器使用。在大多数Windows下的编译器通常在头文件包含非标准函数。itoa()函数把整数转换成字符串,并返回指向转换后的字符串的指针。
💲value:被转换成字符串的数字。
💲str:存储被转换后的字符串。
💲base:设置被转换后的进制,介于2-36之间,如2,8,16进制。
注意,itoa并是一个非标准的C/C++函数,它是Windows持有的,如果要写跨平台的程序,请用sprintf。
环境:vs2019 && win10
使用的是_itoa
int main()
{
int i;
char buffer[33];
printf("Enter a number: ");
scanf("%d", &i);
_itoa(i, buffer, 10);
printf("decimal: %s\n", buffer);
_itoa(i, buffer, 16);
printf("hexadecimal: %s\n", buffer);
_itoa(i, buffer, 2);
printf("binary: %s\n", buffer);
return 0;
}
2.3🔔sprintf
字串格式化命令,主要功能是把格式化的数据写入某个字符串中。
函数原型:int sprintf( char *buffer, const char *format, [ argument] … );
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:char型指针,指向的内存里面存放的将要格式字符串。
[argument]…:可选参数,可以是任何类型的数据。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-BkJJBieq-1715531972033)]
[外链图片转存中…(img-uF783jzN-1715531972033)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!