首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

你必须知道的指针基础-5.指针的几个小应用案例

一、使用指针传出分解后的数字   实现一个方法“多个返回值”的效果:返回一个三位数数字的个位、十位、百位。这里,我们借助指针”返回“分解后的结果。这种应用也是最常见的指针应用。...二、自己动手实现strlen()函数   我们知道strlen是计算字符串的长度,其内部是通过判断是否'\0'作为结束符,虽然其不是一个安全的方式,但是却是各大C教材中最常见的函数。...这里,我们来自己实现一个strlen函数,利用指针的移动辅助计算长度,这也是指针一个最常见的应用。...三、判断字符串A是否字符串B结尾   判断一个字符串是否另一个子子字符串结尾,这个方法在Java中属于String类,叫做endsWith。...// fun3:判断字符串A是否字符串B结尾 int endsWith(char* str,char* substr) { int strlen = 0; while(*str !

33240

搞定大厂算法面试之leetcode精讲20.字符串

验证回文字符串 Ⅱ (easy) 思路:对撞指针不断判断左右两边的数字是否相等 ,如果不相等还有一次机会,左指针向前一步或者右指针向后一步继续验证 复杂度:时间复杂度O(n),空间复杂度O(1)。...不同的子序列 (hard) 方法1.动态规划 ds_153 ds_154 思路:拆分成不同子串的匹配,这些匹配存在重复子结构,可以用动态规划做 状态定义:dp[i][j]表示i-1为结尾的...= t[j-1]时:就不能用s[i - 1]匹配,dp[i][j] = dp[i-1][j] 初始状态: dp[i][0] =1:当j=0时,相当于t是空字符串,空字符在另一个字符串的子串中出现一次...旋转字符串 (easy) 思路:字符串重复一次 判断是否包含另一个字符串 复杂度:时间复杂度O(n^2),比较一个字符串是否包含另一个字符串的复杂度O(n^2)。...空间复杂度O(1) 方法2.双指针 思路:双指针从右往左循环,每次循环两个字符处理掉#,直到第一个字符是右边退格全部处理掉之后的字符,然后看这两个字符是否一致 复杂度:时间复杂度O(m+n),m、n是两个字符串的长度

62340

用javascript分类刷leetcode20.字符串(图文视频讲解)2

空间复杂度O(1)方法2.双指针思路:双指针从右往左循环,每次循环两个字符处理掉#,直到第一个字符是右边退格全部处理掉之后的字符,然后看这两个字符是否一致复杂度:时间复杂度O(m+n),m、n是两个字符串的长度...:dp[i][j]表示i-1为结尾的s,它的子序列中出现以j-1为结尾的t的个数为dp[i][j]状态转移方程: - `s[i-1] == t[j-1]`时: 1.用`s[i - 1]`匹配...= t[j-1]`时:就不能用`s[i - 1]`匹配,`dp[i][j] = dp[i-1][j]`初始状态: - `dp[i][0] =1`:当`j=0`时,相当于t是空字符串,空字符在另一个字符串的子串中出现一次...验证回文字符串 Ⅱ (easy)给你一个字符串 s,最多 可以从中删除一个字符。请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。...示例 3:输入:s = "abc"输出:false提示:1 <= s.length <= 105s 由小写英文字母组成思路:对撞指针不断判断左右两边的数字是否相等 ,如果不相等还有一次机会,左指针向前一步或者右指针向后一步继续验证复杂度

73830

C语言】超详解strncpy&&strncat&&strncmp&&strerror&&perror的使⽤和模拟实现

点击—>手把手教你配置VS的常见函数如何不报错! 库函数strncpy strncpy函数用于将一个字符串拷贝到另一个字符串中,可以限定拷贝的字符数。...src - 源字符串,从中拷贝内容。 num - 要拷贝的字符数。 返回值: 返回目标字符串dest的指针。 注意点: 检查dest空间是否足以容纳src的n个字符及结尾'\0'。...,n-- 表示先使用 n 的值进行比较是否>0,因为&& 是逻辑与运算符,*src !...因此,在使用strncmp函数时,需要确保n的值不会超过任意一个字符串的长度。 strncmp函数返回的结果是一个整数,可以通过结果的正负值判断两个字符串的大小关系。...当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应 的错误码,存放在errno中 每⼀个错误码都是有对应的错误信息的 strerror函数返回的是一个静态字符串指针,不需要手动释放内存。

10710

字符串函数的介绍与模拟实现(一)

strcat函数的使用与模拟实现 strcat函数,是C语言中的一个字符串处理函数,用于将一个字符串追加到另一个字符串的末尾。...这是一个问题,因为 strcat 函数期望第一个参数指向一个 '\0' 结尾字符串,而且第二个参数也必须指向一个 '\0' 结尾字符串。...在这个例子中,dest 只包含一个字符串 “Hello” ,因此没有 '\0' 空字符标记字符串的结束。在C语言中,字符串必须 '\0' 结尾,这是C语言的约定。...因此,应该遵循C语言的约定,确保字符串 '\0' 结尾,并且避免使用 strcat 将一个字符串追加到自身。...strstr 函数是 C 语言中的一个字符串处理函数,用于在一个字符串中查找另一个字符串第一次出现的位置。

7210

Trie(字典树、前缀树)

Trie将整个字符串字母为单位,一个一个拆开,从根节点开始一直到叶子节点去遍历,就形成了一个单词,下图中的Trie就存储的四个单词(cat,dog,deer,panda)   每个节点有26个字母指向下个节点的指针...所以这里描述为每个节点有若干个指向下个节点的指针。   由于很多单词可能是另外一个单词的前缀,比如pan就是panda的前缀,那么再Trie中如何存储呢?...所以我们应该对节点添加一个标识符,判断该节点是否是某个单词的结尾,某一个单词的结尾只靠叶子节点是不能区别出来的,因此我们再设计Node节点时,应该添加一个IsWord,判断该节点是否是单词的结尾。...创建一棵Trie   在创建Trie之前,我们需要先设计Trie的节点类,根据上面说的,每个节点都有若干个指向下个节点的指针,还需要一个isWord判断是否是单词的结尾,代码实现如下: //设计...,判断当前节点是否为单词的结尾,如果不是我们才对size加一,并且维护当前节点的isWord if (!

12410

【CMU15-445 FALL 2022】Project #0 - C++ Primer

——Wiki百科-Trie 通俗的来说,就是将一串字符串依次拆分成字符存储到一棵的节点上,依次相连,前一个字符是后一个字符的父亲。从这个树中,查找是否有对应的字符串。...&&); 移动构造函数,使用一个TrieNode构造本TrieNode 通过移动语义构造对象,避免不必要复制操作,提高代码效率。...注意 判断key是否为空 注意创建root_ 使用unique_ptr的问题,这里给出提示使用auto cur = &root_; cur为unique_ptr 指针,调用get(),获取TrieNode...判断不是结尾字符啦,同时也没有孩子,将其从c几点的children_中删除,所对应内存会被自动释放。 再判断c节点,虽然没有孩子,但是被标记为了结尾节点,过程终止。删除完毕。...只能通过reset()或是std::move() 可以通过调用get(),获取裸指针判断是否为nullptr判断,所有权是否被转移 #include #include <memory

1.1K40

redis设计与实现系列1-SDS

SDS的定义 redis没有直接使用c语言的传统字符串表示(空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型。...可见,SDS遵循c字符串空字符结尾的惯例,保存空字符的一字节空间不计算在SDS的 len属性里面,并且为空字符分配额外的一字节空间。...因为传统c语言中,如果要知道一个字符串数组的长度,都需要去遍历字符串,利用空字符串判断长度,时间复杂度是O(N),但是这样包装一下,每次对字符串增加或者截短的时候改变一下这个属性,就能达到O(1)时间复杂度获取字符串长度的效果...但是使用SDS就能保证安全,因为SDS是使用len属性判断字符串是否结束。 所以SDS的 buf属性被称为字节数组,因为这个数组不是用来存字符串的,而是用来存一系列二进制数据的。...2.5 兼容部分C字符串函数 SDS遵循C字符串空字符结尾的惯例,这样可以重用一些 库里面定义的函数。

53810

熬夜整理的万字CC++总结(五),值得收藏

例如,一个大文件可以存储在一些分散的区段中,或者还会包含一些操作系统可以确定其文件类型的附加数据,但是这些是操作系统,而不是我们程序员所要关心的事情。我们应该考虑如何C 程序中处理文件。...另一个可能不同的特性是文本行的结束方式。例如在 Windows 系统中,文本文件约定一个回车符和一个换行符结尾。但是在 Linux 下只使用一个换行符结尾。...如何函数失败,它会返回一个NULL值。如果程序不检查错误,这个NULL指针就会传给后续的I/O函数。它们将对这个指针执行间接访问,并将失败。.../mydata.txt", "r"); if (fp_read == NULL){ return; } #if 0 //判断文件结尾 注意:多输出一个空格 while (!...EOF (其对应值为 -1 ),该函数返回一个 -1 给 ch,在程序中常用检查该函数返回值是否为 -1 判断是否已读到文件尾,从而决定是否继续。

91620

【熟视C语言】如何快速的了解一个库函数(C语言讲解,string.h中的部分库函数为例)

所以,本篇文章旨在向读者展示如何了解并熟练使用一个库函数,本篇文章头文件string.h中的一部分库函数为例讲解。...辅助工具使用演示 在讲解前先给你们展示一下如何使用一些辅助工具,也就是网站,来了解库函数。...也就是说,只需要判断函数返回值是否为零就能判断传参的两个字符串是否相同。同时,这个说明也讲了这个函数是如何运作的。...按照说明,函数的功能是将source指向字符串的一份拷贝连接到destination指向字符串结尾,destination指向字符串结尾的'\0'会被覆盖,且在连接完成后的新字符串结尾会带有'\0'。...很明显,这是一个检查在一个字符串是否出现另一个字符串内容的函数。此外,在匹配过程中,str2中的'\0'不计入匹配但会作为停止标志。

17610

C进阶:字符串相关函数及其模拟实现

= '\0') { count++; } return count; } 这里的 assert ,是用来判断 str 是否是空指针的,且需要包含头文件 ; 二.strcpy...1.功能 字符串拷贝函数,将源字符串的内容拷贝到目标空间内; 2.注意事项 1.源字符串必须 '\0' 结束。...(连接)函数,将一个字符串的内容追加到另一个字符串结束的末尾; 2.注意事项 1.源字符串必须 '\0' 结束。...3.模拟实现 库函数里的定义: 思路一:要找到目标字符串结尾在哪里,然后再把源字符串的内容追加在后面; 思路二:将目标字符串结尾处作为起始地址,把源字符串内容拷贝进去; 让我们来看代码: char...2.模拟实现 既然是在一个字符串中查找另一个字符串,那么我们肯定是从第1个字符开始,如果相同,那么向后继续查找,如果不同,则换一个查找的起始点,但有时候我们会碰到查找到部分相同的,剩下的部分不相同,

11610

C语言基础】:字符函数和字符串函数

字符分类函数 C语言中有一系列的函数是对字符进行分类的,就是对判断一个字符属于什么类型的字符,这类字符函数的使用都要包含一个头文件ctype.h。...这些函数的使用方法非常类似,这里我们就只举一个例子。 int islower ( int c ); 在C语言中,islower是一个用于判断字符是否为小写字母的函数。...首先我们肯定要判断传入进来的指针是否为空指针,这里要断言一下,而且为了防止要追加的字符串被修改,我们要将它用const修饰一下。...因为被追加的字符串是从 \0开始追加的,所以我们在追加之前要将指针指向字符串结尾,这里用while循环判断,只要不是\0我们就加一,直到指向字符串结尾。...strcat函数原型的返回值的char * 类型的,这里我们也返回char * 类型的,但要注意这里返回的是被追加字符串的起始地址,由于我们在实现追加的过程中将指针往后进行了偏移不在指向起始地址,所以我们要创建一个指针变量记录被追加字符串的起始地址

8210

LeetCode 第3题 无重复字符的最长子串(小白详解)

无重复字符的最长字串 一、题目描述 示例 1: 示例 2: 示例 3: 二、个人思路及解答 使用的数据结构:桶 C++代码 三、官方题解 一、题目描述 无重复字符的最长子串 难度:中等 给定一个字符串...通过次数561,007  提交次数1,601,892 二、个人思路及解答   这个题,乍一看,感觉应该使用滑动窗口+桶解决。   初步思路是,求得以窗口右侧right结尾的最长的无重复字符串。...当依次将 right 从1滑动至字符串尾部时,(除以s[0]外)字符串中任意下标结尾的最长的无重复字符串将全部遍历完毕,最大值自然就出来了。   ...那么问题来了:在已知【right-1为结尾的最长无重复串的】左端点的基础上,的如何求【right为下标结尾的最长的无重复字符串】呢?...,right指向当前非重复字符串的下一个即将判断的字符 int left = 0, right = 0; int maxLength = 0; while(right

23620

CCPP输入输出函数汇总分析

= 2){...}判断用户输入是否正确. printf() int printf(const char *format, arg_list) printf主要是将格式化字符串输出到标准输出流中,在stdio.h...) getc主要是从文件中读出一个字符.常用的判断文件是否读取结束的语句为:(ch = getc(fp)) !...所以字符+换行符<=n-1,因为一定要留一个NULL字符标识缓冲区的结束; fgets是C语言库函数,它从指定的文件中读取一行字符串。...补充:将一个null结尾字符串写到标准输出上,相当于进程->流->标准输出文件。终止符不写出,但是puts然后又将一个换行符写到标准输出。应当少用,以免需要记住它在最后是否添加了一个换行符。...puts() 函数是 C 库函数,用于在标准输出中输出一个 null 结尾字符串。该函数向标准输出设备(通常是屏幕)输出字符串,并在字符串的末尾添加换行符(’\n’)。

1.7K20
领券