一、strtok函数
介绍:该函数能将字符串里面的分隔符从字符串里去掉
形式:
记存放字符串的数组为arr
字符串里面分隔符的集合为sep
则函数写为strtok(arr,sep)
原理:strtok函数从字符串起始位置开始查找分割符里面的元素,并把该位置的字符串修改成 '\0'
所以一般我们使用该函数时不会直接把字符串传进去 ,而是会拷贝一份放进去。
如果再次调用该函数,则从被修改成 '\0' 的位置开始往后查找分隔符集合里的元素,找到后把该元素替换成 '\0'
该函数的地址是首字符的地址。
上面就是第一次调用返回6的地址,打印697,@被修改成'\0'
第二次返回qq首元素的地址, ‘.’ 修改成‘\0’ ,打印qq
最后返回com的地址,打印com
再往后面找就没有内容了,就返回空指针了,循环结束。
二、strstr函数
strstr(arr1,arr2)
表示在arr1里面找arr2里面的字符串,如果找到,返回首元素的地址。
如果arr1里面有多个arr2里面的字符串,则返回第一个出现的字符串的地址。
strstr函数的模拟:
比如要找str1里面有没有str2里面的所有元素。我们将两个数组的首元素进行比较,如果一样,那地址各自后移一位,比较后面两个元素。
就拿上图的例子来讲,一开始两元素不相等,我们就把str1的地址后移一位
右面两个元素都相等,则str1,str2里面元素分别后移,但是后面两个元素就不相等了(一个是b,一个是c)
这个时候str2要回到首元素的地址,str1要回到本次循环开始的位置再往后偏移一个,所以一开始我们可以给str1定一个标记点cur。这样子我们方便回到起始位置。
核心思路是:判断两个元素是否相等,若相等比较后面两个元素,直到str2里面的元素全都遍历了一遍。如果两个元素不相等,则全部退回到起始地址,标记点的地址++。如果标记点遍历到了str1里面的最后一个元素还没有匹配,则找寻失败。
三、memcpy函数
输入目标地址,源地址,要拷贝的字节数
就能把源地址里的数据拷贝到目标地址里面。
返回值是输入函数里的目标地址
比如上图就是把arr里面的cq放到sep里面的b的位置,返回b的地址
注意:若源内存块和目标内存块有重叠,要用memmove函数
四、memmove函数
memmove函数的模拟实现