对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除
目录
对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除
相关字符串函数接口
/********************************************************************************************************
*
*
* 设计一个函数对字符串A进行处理,参照字符串B的字符,字符B中存在的英文字符与字符A中一样,且不分大小写,需要把该字符
* 从字符串A中进行删除
*
*
* Copyright (c) 2023-2024 17666589210@136.com All right Reserved
* ******************************************************************************************************/
#include <stdio.h>
删除字符串A中与字符串B相同的英文字符,不分大小写的函数
/*******************************************************************
*
* name : string
* function : 删除字符串A中与字符串B相同的英文字符,不分大小写
* argument :
* @strA:字符串A的指针地址
* @strB:字符串B的指针地址
*
* retval : 字符串A的地址
* author : 17666589210@136.com
* date : 2024/05/06
* note : None
*
* *****************************************************************/
//对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除
char *string(char *strA,const char *strB)
{
//char * p = strA; //备份字符串A的地址
char * w = strA; //备份字符串A的地址
//判断字符串B是否到达末尾
while(*strB != '\0')
{
//判断字符串B的当前字符是否属于字母(大写字母 or 小写字母)
if ( (*strB < 'A' || *strB > 'Z') && (*strB < 'a' || *strB > 'z') )
{
//如果字符串B的字符不是字母,则向后偏移
strB++;
continue;
}
//让字符串B中的每个字符都和字符串A中的所有字符进行比较
while(*w != '\0')
{
//比较字符的ASCII码,注意:不分大小写
if (*w ==*strB || *w == *strB + 32 || *w == *strB - 32)
{
char * p = w; //用p备份当前需要删除字符w位置的地址
while(*p != '\0')
{
*p = *(p+1); //相同的从后往前覆盖
p++;
}
w--; //返回覆盖的前一个地址,防止重复的字符串无返删除完整
//printf("%s\n",strA); //用于测试删除情况
}
w++;
}
w=strA; //一次覆盖完成对w的地址进行重置
strB++; //偏移到下一个字符进行对比
}
return strA;
}
该程序的调试部分
int main()
{
char str1[] = "HHhehllol worjhld";
char str2[]= "lhj";
printf("%s\n",string(str1,str2));
return 0;
}