删除A字符串中B字符串有的字符

/****************************************************************
 * name;DelStrAofStrB
 * function:删除字符A里面含有的B字符
 * parameter;
 *              @char *strA
 *              @char *strB
 * ReValue;strA
 * author;小北blog
 * attention;none
 * date;2024.05.07
 * Copyright(c) 2024 huahuadebaby99@163.com All rights Reserved
 *****************************************************************/

/****************************************************************
 * name;DelStrAofStrB
 * function:删除字符A里面含有的B字符
 * parameter;
 *              @char *strA
 *              @char *strB
 * ReValue;strA
 * author;小北blog
 * attention;none
 * date;2024.05.07
 * Copyright(c) 2024 huahuadebaby99@163.com All rights Reserved
 *****************************************************************/
#include <stdio.h>

char *DelStrAofStrB(char *strA, char *strB)
{

    // 判断字符串B是否到尾部
    while (*strB != '\0')
    {
        // 判断字符串B的当前字符是否属于字母(不论大小写)
        if ((*strB < 'A' || *strB > 'Z') && (*strB < 'a' || *strB > 'z'))
        {
            // 如果字符串B的字符不是字母,则向后偏移
            strB++;
            continue;
        }
        // 保存A字符串的地址
        char *MemberstrA = strA;
        // 让字符串B中的字符都和字符串A每个字符比较
        while (*strA != '\0')
        {

            // 比较字符的ASCII码,不分大小写
            if (*strB == *strA || *strB == (*strA + 32) || *strB == (*strA - 32))
            {
                // 找到匹配的字符,删除字符串A中的这个字符
                char *temp = strA;
                while (*temp != '\0')
                {
                    *temp = *(temp + 1);
                    temp++;
                }
            }

            else
                strA++; // 不相等的情况那么比较下一个
        }
        strB++; // 处理下一个字符B
        // 重置A的地址
        strA = MemberstrA;
    }

    return strA;
}
int main(void)
{
    char A[30] = "delllLLopqrst";
    char B[10] = "dels";
    DelStrAofStrB(A, B);
    printf("%s\n", A);
    return 0;
}
}

验证结果

代码实现思想:
1.考虑这个函数传进来是两个数组指针,返回的是A字符串删除后了的指针,其实字符串A的地址没有改变
2.考虑到框架问题,应该先考虑到用循环遍历B字符串的每一个字符,直到最后,并且只接收字母。
3.考虑到返回的A字符串的地址不能发生改变,所以后面需要A字符串的地址的时候备份就好了。
4.前面遍历B字符串做好了那么就再做遍历A字符串的比较工作,这里第二个循环是该代码的中心思想:
判断是否相等不论大小字母,也要备份在这个循环当中A所在的地址,当匹配时删除字符,当前地址后的所有字符整体往前移动一个字符单位,但是由于会发生相同字母或者相同字母不同大小区别的连续的情况,所以这时候不对A字符指针做向后偏移的动作,而只对备份的指针做偏移,所以当再循环的时候A字符串的地址还是不发生改变,或者说该动作没有++自增。这样删除的时候A当前位置下被A后一个字符覆盖时,该字符也是符合删除条件但没有被删除。

posted @ 2024-05-06 19:40  小北bolg  阅读(33)  评论(0)    收藏  举报