首页
学习
活动
专区
圈层
工具
发布

atoi函数的模拟实现

这里强力推荐一篇文章 http://t.csdnimg.cn/kWuAm 详细解析了atoi函数以及其模拟实现,我这里就不说了。 这里作者先把自己模拟的代码给大家看一下。...// 6666 printf("%d\n", my_atoi(f)); // 5020 printf("%d\n", my_atoi(g)); // 0 return 0; } 这里我模拟的代码实现了这个效果...所以给大家看下简洁版的代码,也就是那篇文章作者的代码。...,前面的循环不进去,这里直接返回0 return 0; } int main() { char a[] = ""; char b[] = " "; char c[] = "66666"...(建议大家去认真看下那篇文章讲的真的挺好) 库函数atoi实现的效果跟我们模拟的一模一样 所以这就是atoi函数的模拟实现,其函数解析在另一篇文章里,强力推荐这篇文章。

34910

库函数的模拟实现

前言: 在上一篇文章中我们了解到了一些库函数的使用,为了加深我们对库函数的理解,我们来模拟实现一下这些库函数的用法。...这是上一篇文章的链接: http://t.csdnimg.cn/r7SKN 1.模拟实现strlen 模拟实现strlen函数有三种基本方式: 方式1:计数器方式 #include int...0 }; char arr2[] = "abc"; my_strcpy(arr1, arr2); printf("%s\n", arr1); return 0; } my_strcpy这个函数的返回值是...strcpy在库函数里面的规定的返回值是目标空间的起始地址,所以先用char*的指针保存一下dest的起始地址,最后返回ret。...先写一个while函数判断字符是否相同,相同则++进行下一个字符的比较,如果不相同则进入if,判断是>还是则返回1,否则返回-1。

42610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    模拟实现strstr函数

    以我自己为例,刚开始写strstr函数的实现还是漏洞百出的。下面就记录一下我当时的思考过程。...strstr在进行字串查找时,如果找到,则返回字串在源字符串中第一次出现的位置;如果没有找到,则返回NULL。下面我们逐步来看可能出现的各种情况。...这里,按照上面所举的例子,对应的逻辑,我们已经遍历到了字串的\0处,判断出来字串bc在对应源串的1(这里见图解)处,那么问题来了?虽然已经找到了字串对应的位置,但是如何返回呢?...str指针已经移动到了3(即d)的位置处。很明显无法在找到字串第一次出现的位置了。 这个问题给我们的启示是:在两个指针不断移动进行比较期间,一定要保存下匹配的位置。那么如何保存呢?...---- 通过上面众多例子的分析:搞清楚了两个最重要的问题: (1)匹配成功时,最后返回的是字串第一次出现的位置。

    45110

    memmove函数和memcpy函数的模拟实现

    num ); 我们要注意,这里的num是以字节为单位的,而不是元素个数,并且由于这里我们不知道memmove所移动的内容是什么数据类型,所以移动的目的和源头都用void来定义,由于memmove函数还需有返回目的的起始地址...下面我们就可以对memmove函数进行模拟实现 我们定义此模拟实现函数为my_memmove 我们定义数组 arr[]={1,2,3,4,5,6,7} 我们想要将数组中数字3,4,5放入1,2,3的位置中...,若依旧采用从前向后的方式的话,会是这种效果 这个时候我们就可以开始构思函数了 由于函数最终需要返回det的起始地址,所以我们定义一个void* ret=det放入函数中,并且采用断言保证不为空指针...while (size--) { *((char*)det + size) = *((char*)src + size); } 到这里,memmove的模拟实现就完成了,我们还要记得返回...memmove函数模拟实现的一部分,就是只采用了从前向后的方式进行内存更改,所以这里我就不做过多的解释了,大家自行理解。

    39210

    模拟 ROW_NUMBER() 函数

    MySQL 在 8.0 的版本推出了窗口函数,我们可以很方便地使用 row_number() 函数生成序号。...图2 组内按入职时间升序排序 那在 MySQL 8.0 版本之前呢,我们要怎么模拟 row_number() 函数? 方法还是比较多,接下来给大家展示一些经常用到的实现方法。...用户变量 使用用户变量可以模拟大多数的窗口函数的功能,如果要实现上面图2 的效果,使用用户变量的写法要这样: SELECT rn, empno, ename, job, mgr,...emp, (SELECT @deptno := NULL, @rn := 1) b ORDER BY deptno, hiredate) t 使用用户变量模拟窗口函数需要注意两个地方...: 排序,窗口函数里面用到分组、排序的字段,在使用用户变量的 SQL 中一定会出现在排序语句里面,而且是用于分组的字段排在前面; 赋值的表达式是 :=,比较符号用 = ,千万不能混用。

    1.4K20

    字符函数,字符串函数及部分函数的模拟实现

    以下是我所了解到的部分字符函数,及其cplusplus官网中这些函数的链接: 函数 若其参数是符合下列条件则返回真 iscntrl 任何控制字符 isspace 空白字符:空格‘’,换页 '\f,换行...,字符串的长度由终止字符决定,即'\0' ,字符串的长度为字符串开头和终止字符之间的字符数; 例如: void main() { char ch[100] = "abcdefg"; printf("...ch2中并没有'\0' ,那其长度又会如何判断呢?...但这个结果并不是固定不变的,由于内存中存放的数是随机的,故当我们重新生成一个程序之后,其结果会变为另外一个随机值; 模拟实现: 方法1: 我们知道strlen函数遇到'\0'就会停止,故我们可以使用一个循环...,当循环遇到'\0'则停止计数; 通过官网我们知道,strlen函数的返回值是size_t,即无符号的整形,参数为const char* str; 通过代码实现: #include<stdio.h

    37810

    字符串函数和内存函数的模拟实现

    模拟实现:先将dest的初始地址存在ret变量中,便于我们后面直接返回dest的初始地址。...,则返回⼩于0的数字 ◦ 那么如何判断两个字符串?...以下是模拟实现的代码截图和运行情况  4.关于strncpy,strncat,strncmp字符串函数 这里每一个字符串函数中都多了一个n,其实也和上面那些函数相差不大,在参数中我们就要多一个参数size_t...1,所以3拷不到5的位置,5的位置只会被拷成1,也就是说我们要拷贝的内存会被覆盖,此时我们应该如何避免呢?...模拟实现:  还有memset内存函数(用来设置内存的,将内存的值以字节为单位设置成想要的内容)和memcmp内存函数等,这里我们就不做赘述。 以上就是我的一些看法和总结!

    12310

    字符函数和字符串函数(一):字符分类函数、字符转换函数、strlen的使用和模拟实现、strcpy的使用和模拟实现、strcat的使用和模拟实现、strcmp的使用和模拟实现

    ; 返回值:返回了str指向的字符串的长度,返回的长度不会是负数,所以返回类型是size_t。...); 功能:字符串拷贝,拷贝到源头字符串的\0为止; 参数: destination:指针,指向目的地空间; source:指针,指向源头数据; 返回值: strcat函数返回的是目标空间的起始地址...这个模拟实现的效果还不够好,我们还可以再改一下—— 参数、返回类型和功能要一致。...参数: destination:指针,指向目的地空间; source:指针,指向源头数据; 返回值: strcat函数返回的是目标空间的起始地址 。...大家观察strcat的代码块就会发现,它返回的是char*,并且strcat函数返回的是目标空间的起始地址 ,我们这边可以用char*的指针来接受返回值: #include #include

    17810

    c语言qsort函数的模拟实现

    模拟实现qsort函数 关于qsort函数的预备知识 回调函数 函数指针类型解析 qsort函数用法及相关参数 冒泡排序算法 模拟实现方法介绍 源代码 关于qsort函数的预备知识 回调函数 回调函数就是...回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。...我们来写一段代码: 通过调试我们不难看出函数是有地址的,函数名就是函数的地址,当然也可以通过&函数名的方式获得函数的地址。那么该如何接收函数的地址呢?...; (4) 第三个参数是一个函数指针,指向的compar函数能比较两个元素,这个函数是要我们自己实现的; 我们可以观察到compar函数返回类型是int,参数类型是const void*。...模拟实现方法介绍 那么既然明白了冒泡排序算法,那如何改进成类似qsort函数呢? 其实依旧是两层循环,外层len,内存len-i次。

    44710

    字符串函数的模拟实现

    今天我们来了解以下一些字符串函数的模拟实现: strlen strcpy strcat strcmp strlen函数的模拟实现 首先我们转到cplusplus中查找strlen的官方解释: 通过查找我们了解到...,strlen是用来测量一个字符串长度的函数,函数的返回值就是字符的长度 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包含 ‘\0’ )。...,知道找到"\0",一旦找到,函数就立即停止,返回元素个数,这样理解,我们就可以更好地开始它的模拟实现了 方法一:以计数的方式实现 我们定义一个count,用while循环实现count的++,str为字符串的第一个元素的地址...拷贝完成 这里我们要将dest的首地址记录下来,因为官方的函数定义是要求这个函数返回dest的首地址的 char* my_strcpy(char* dest, const char* src) {...= NULL); while((*dest++ = *src++)) { ; } return ret; } strcat函数的模拟实现 strcat的作用时将src链接到dest后面,并且这里也要返回

    30610

    atoi函数的讲解和模拟实现

    一.atoi函数介绍 简单来讲,就是将一个字符串中的数字字符变为整数。...atoi(a);     printf("%d",ret);     return 0; } 例如一个字符串ch="a1234",那么atoi第一次检索时没有直接遇到数字,而是遇到了字母,那么就会返回...如果该字符串全部都是空格,那么就会返回0。 如果字符串数字和数字之间存在空格,那么不会继续检索。 3.字符串内含有正负号 atoi会自动识别正负号,并在输出的数字前面加上正负号。...但如果是在数字之后的正负号,那么就会与数字后遇到字母,空格同理,停止继续检索。...三.atoi函数模拟实现 在编写时,我们需要注意以下几点:1,开头遇到空格应往后继续跳过,直到遇到数字;2,如果碰到字母应直接返回0;3,应检查atoi转换后的数字是否还在int表示范围内。

    21010

    关于内存操作函数的模拟实现

    一.什么是内存操作函数? 简单来说就是C语言中一些可以进行内存操作的函数。...2.变量的内存分配: 栈区:指那些在编译器需要时分配空间,不需要时就自动清除的变量所在的存储区,例如:分配给函数内部的局部变量。...堆区:指那些由程序员手动分配内存,若程序员不释放,则会一直存在的存储区(malloc,new,free,delete)。 静态存储区:全局变量和静态变量是放在一起的,这块空间在程序结束后由系统释放。...,设置的值,要设置的字节数传入函数,函数内部,每一字节都让他等于要设置的值即可。...,要变换的字节数传入其中,此处跟memcpy一样,都要转换成字符型,此模拟函数分为两种情况,但都有一样的原理:当目的地的地址小于源时,得先传前面的,当目的地的地址大于源时,得先传后面,目的都是为了避免数值覆盖

    28910

    模拟字符串常见函数(1) strlen函数

    本文将解析常见字符串函数的用法,并通过模拟实现来加深对于它们的理解,以便更好、更灵活的使用它们。...strlen函数 size_t strlen( const char* str) strlen函数的用法是返回在字符串中‘\0'前面出现的字符个数(不包含\0),看函数格式可以知道,它返回的是size_t...通过这个函数可以轻松的知道字符串里的字符个数,下面来模拟实现它。...方法1 计数器法 既然它统计的是\0前的字符个数,那我们可以从头开始遍历,用一个count变量来保存遍历过的字符,然后返回count就是它的总字符个数了,注意这里是不包含\0的。...到达下一个字符的位置,然后在加上前一个字符,如此递归下去,最后返回的就是整个字符串的字符个数(不包含\0)。

    31010

    模拟实现字符串函数(3) strcat函数

    1.函数介绍 strcat函数可以实现对一个字符串的追加,它的返回类型是一个char*的指针,参数是dest(需要追加的字符串的位置)和src(需要追加的字符串内容)。...2.模拟实现 下面我们来模拟实现,首先字符串追加,肯定是追加在字符串的最后面,所以我们就得取到字符串最后一位的地址,往后实现追加,字符串是以/0为结尾,我们可以循环目标字符串,如果检测到/0,就停止。...此时dest指向的是字符串的末尾,往后开始,将src的内容赋给dest并实现自增,直到src遇到/0结束。...注意事项 这里需要注意的是,目标字符串的空间一定要够; 同时它的返回类型是一个字符指针,可以用一个字符指针接收。...#define _CRT_SECURE_NO_WARNINGS 1 #include #include //strcat函数模拟实现 char* my_strcat

    29210

    冒泡排序模拟实现qsort函数

    我们知道,qsort是使用的快速排序来帮助我们进行排序,为了帮助初学者更好地理解qsort函数,我们今天使用冒泡排序来模拟一个函数实现qsort的功能: 我们首先先看qsort的参数: qsort具备四个参数...当然这个函数的返回值必须满足以下条件 分析完qsort的形参之后,我们就开始尝试用冒泡排序来模拟实现qsort的功能。...很显然,这里就要靠形参函数指针了,在qsort函数中的函数指针指向一个由使用者自己提供的一个函数,这个函数的作用是比较数组两个元素的大小。...根据qsort的参数设定,comper函数返回值应该满足  我们这里以整形数组 为例,那么comper函数就可以定义为: int comper(const void* x,const void* y)...{ return *(int*)x-*(int*)y; } 定义完那bbs函数就可以改成: comper函数后,根据冒泡排序的原理,我们应该比较每个元素的大小并选择交换,所以如何使每一次j循环进入,

    14310
    领券