ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C语言部分字符串函数的实现

C语言部分字符串函数的实现 1.strlen函数的模拟实现strlen函数是求一个字符串/0之前的字符个数。因为一个字符串的的大小不可能为负数所以函数的返回类型为size_t函数的参数为字符串的首元素地址因为我们不想然这个字符串发生改变所以在前面加上const。下面是实现这个函数的3种方法第一种方法计数法上面代码的assert是为了防止传递一个空指针。第二种方法递归求一个字符串的长度比如abc可以看成是求字符串bc的长度再加一个1而求bc的长度又可以看成是求1c的长度所以我们可以用递归来实现strlen,代码如下:第三种方法指针减指针两个指针变量相减得到的是两指针之间元素的个数。所以我们可以先用ptr记录字符串首元素的地址再让arr到\0的位置用2个指针相减来得到字符串的个数。2.strcpy函数的模拟实现将source指向的 C 字符串复制到destination指向的数组中包含末尾的空字符\0并在遇到该空字符时停止复制。因为要复制的内容我们不希望它发生改变所以再前面加上了const而dst是要改变的我们就是要将src的字符串复制到dst中所以dst前不用加上const。我们可以把上述代码再简化一下。这样·就不用再创建一个sz变量了。3.strcmp函数的模拟实现strcmp的功能是比较2个字符串的大小若str1指向的字符串大于str2指向的字符串则返回一个大于1的数等于则返回0小于则返回一个小于0的数。实现的代码如下我们可以简化上述代码。使用可以把2个断言的代码变成一个然后我们知道字符实际上是ASCII码值所以当str1指向的字符内容和str2指向的字符的内容不相等时直接return *str1 - *str2。4.strcat函数的模拟实现strcat函数的功能是在destination指向的字符串的末尾添加上source指向的字符串destination字符串末尾的\0会被覆盖并拼接完后的字符串末尾是有\0的。模拟实现的代码如下4.strstr函数的模拟实现strstr的功能是在主串中查找子串第一次出现的位置。找到返回一个指针指向主串中子串起始字符找不到返回NULL我们想自己实现它分2种情况第一种请况是一次匹配就成功。如上图当str1和str2指针指向的字符不同时此时str1的指针要加1这时str2和str1指向的字符都相等继续让str1向后加1同时str2也加1如果比较到str2为\0说明下面那个字符串是上面那个字符串的子串。此时我们要返回主串中子串第一次出现的位置所以在一开始我们最好还要有一个变量cp1记录这个开始的位置。第二种情况是一次匹配没有成功的情况。前面比较的部分和第一种情况一样但是第二种情况当我们比较到第三个字符是发现b与c并不相同这时说明cp1这个位置并不是我们的起始位置我们需要让str1跳到此时cp1的下一个位置再开始比较。同时要让此时的str2回到开头的位置所以最好还要有一个变量cp2记录下面那个字符串开头的地址。所以我们写出的代码如下我们还需要考虑到当字串是空字符串时要返回主串的起始地址。当str2指向的内容是\0时证明我们找到了字串。
返回列表