C和指针之删除字符串第一次出现的子串

来源:互联网 发布:美国非农数据公布网站 编辑:程序博客网 时间:2024/05/17 09:05

1、问题

函数首先先判断substr是否出现在str中,如果它并没有出现,返回0,如果出现,函数应该把str *中位于该字符串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1,如果 *多次出现str中,函数只删除第1次出现的子串,函数的第2个参数绝不会被修改。





2、实现

#include <stdio.h>#include <stdlib.h>/** *函数首先先判断substr是否出现在str中,如果它并没有出现,返回0,如果出现,函数应该把str *中位于该字符串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1,如果 *多次出现str中,函数只删除第1次出现的子串,函数的第2个参数绝不会被修改。 */int del_substr(char *str, const char *substr){   //条件判断   if (str == NULL || substr == NULL)      return 0;   //指向str   char *str1;   //指向substr   const char *substr1 = substr;   for (; *str != '\0'; ++str)   {    str1 = str;        while (*str1 == *substr1 && str1 != '\0' && substr1 != '\0')        {            ++str1;            ++substr1;        }        //如果程序走到这里,就找到了子字符串        if (*substr1 == '\0')        {           //让str指向后面覆盖部位           while (*str1 != '\0')               *str++ = *str1++;           //末尾置为\0           *str = '\0';           return 1;        }        substr1 = substr;   }   return 0;}int main(){// char *str = "chenyugogongchenyu";// 我一开始是按上面写的,运行出错了Bus error: 10// 字符串常量存储在常量区,只能读,不能写,所以报错   const char *substr = "gong";   int result = del_substr(str, substr);   if (result)      printf("str contain substr and str is %s and substr is %s\n", str, substr);   else      printf("str do not contain substr\n");   return 0;}





3、运行结果

str contain substr and str is chenyugochenyu and substr is gong





阅读全文
0 0
原创粉丝点击