对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除

image

目录

对字符串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;
}
posted @ 2024-05-06 20:46  52017  阅读(15)  评论(0编辑  收藏  举报