C语言从字符串中删除某个子串

C和指针 专栏收录该内容
68 篇文章 0 订阅

编写函数删除一个字符串中的一部分,函数原型如下:

int del_substr(char *str, char const *substr) 

函数首先判断substr是否出现在str中,如果未出现,函数就返回0;如果出现,函数应该把str中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第一次出现的子串。

函数的第2个参数不能修改。

eg: 假定str指向“ABCDEFG”这个字符串,如果substr指向"FGH"、"CDF"或者“XABC”时,函数应该返回0,str未作修改。如果substr指向"CDE",函数就把str修改为指向“ABFG”,方法是把‘F’、‘G’和最后的'\0'都一起复制到‘C’的位置,然后函数返回1。

这里目的是修改第一个参数,但要求寻找的子串不允许修改。

同样不能使用C库函数。也不使用数组下标引用。

#include <stdio.h>

#define TRUE 1
#define FALSE 0

//每次从当前的str中搜寻子串,没有找到就返回NULL,
//找到就返回子串在str中的尾部的下一个指针
char* match(char *str, char *want) {
    while(*want != '\0') {
        //如果str先到达尾部,也会是NULL
        if(*str++ != *want++) {
            return NULL;
        }
    }
    return str;
}

int del_substr(char *str, char const *substr) {
    char *next;
    while (*str != '\0' ) {
        next = match(str, substr);
        //找到substr
        if (next != NULL) {
            break;
        }
        str++;
    }
    //如果str指向了尾部,说明没有找到
    if (*str == '\0') {
        return FALSE;
    }
    //将查找到的子串的尾部拷贝到查找到的子传的首部
    while(*str != '\0'){
        *str++ = *next++;
    }
    return TRUE;
}

int main () {

    char str[] = "ABCDEFG";
    char *substr = "CDE";
    int rs = del_substr(str, substr);
    printf("rs: %d\n", rs);
    printf("str: %s\n", str);
    return 0;
}

这个示例很好的演示了指针指向的移动、传递、更改指针指向的数据等等,对指针的理解很有帮助。

 

 

 

  • 1
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值