目录
一,strcmp函数的模拟实现
1,函数介绍:
比较两个字符串的库函数,设这两个字符串为str1,str2,
若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
2,设计模拟实现的思路:
二,strcat函数的模拟实现
1,strcat函数的介绍
strcat是连接字符串的函数。函数返回指针,两个参数都是指针,第一个参数所指向的内存的地址必须能容纳两个字符串连接后的大小。
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
2,设计模拟实现的思路:
都在注释里面写了,每一步的原因及作用。assert是基本必备,不多赘述,是安全性的问题
三,strstr函数的模拟实现
1,strstr函数的介绍:
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。
有情况一:一次就能找到,从a开始,慢慢往后走,找到bcd,正好找到了。这种最简单方便
情况二:较为复杂,多次匹配才能找到,先从a开始找3个,不符合,从b开始找3个,不符合。
从第二个b,开始往后找3个符合了。就是找到了。
需要每次前进一个字符去找3个试一试。找到即返回,从哪开始找的那个地址。
2,函数的模拟实现
代码解析:实现函数时,至少要有3个指针,因为最好不要改变函数里面的参数。从新定义两个指针变量用来计算。
先把起始地址赋给p,最后返回值,是返回p,因为dest在往后寻找时,已经被改变了位置,即使找到了,也不再是目标字符串的起始地址。
大循环的循坏条件是(*p)从头开始寻找,如果找完还没有,返回空指针,说明没找到。根本没有。
里面小循环的条件是保证一个一个对应,依次往后遍历。直到不相等跳出。要么找完没找到,要么找到了。要是没找到,p++,进行下一个起始地址,开始寻找。。循环即可