在A数组中删除B数组中出现的所有字母

数据结构

笔试题:设计一程序实现功能,处理字符串 A,处理规则是:只要B字符串里面有的字母,不分大小写,一律从A字符串中删掉。
image

思路

1.判断字符串B中的字符是否有与字符串A相同
因不分字母大小写,所以字符串A中的字符减去字符串B得正或负32则为同一个字母 (例如:'A'-'a'=-32,'a'-'A'=32)
2.当出现相同需要删除的字符后开始计数
3.将需要删除字母的下标j加计数的值h往前面需要删除字母的下标处j覆盖
(例如:字符串A为hellooo,字符串B为l,计数值为2,覆盖后为heooo)
strA[j] = strA[j+h]
strA[2] = strA[2+2]

代码

/*************************************************************************************
 *
 *  file name:  1.c
 *  author   : 	lu.ciana.598393@gmail.com
 *  date     :  2024/05/06
 *  function : 	在A数组中删除B数组中出现的所有字母
 *  note	 :  none
 *  CopyRight (c)   2024    lu.ciana.598393@gmail.com   All Right Reserved
 *
 ************************************************************************************/
#include <stdio.h>
#include <string.h>

/**
  * @name:		string
  * @brief  	在A数组中删除B数组中出现的所有字母
  * @param  
  				@strA
				@strB
  * @retval 	char *
  * @date 		2024/05/06
  * @note   	none
  */
char *string(char *strA,const char *strB)
{
    int h=0;
    int sizeA=strlen(strA);
    int sizeB=strlen(strB);
	//判断字符串B是否到达末尾
	for(int i=0;i<sizeB;i++) 
	{
        //判断字符串B的当前字符是否属于字母(大写字母 or 小写字母)    
		if ( (strB[i] < 'A' || strB[i] > 'Z') && (strB[i] < 'a' || strB[i] > 'z') )
		{
			continue;
		}
		for(int j=0;j<sizeA;j++)
		{
			//判断字符串B的当前字符是否为同一字母
            while(strA[j+h]==strB[i] || strA[j+h]-strB[i]==32 || strA[j+h]-strB[i]==-32)   
            {
                h++;
            }
            strA[j] = strA[j+h];
		}
        h=0;
	}
}
int main()
{
    char A[100]={"hELloworlD"};
    char B[100]={"daefl"};
    printf("原先的A为:%s\n",A);
    string(A,B);
    printf("删除后的A为:%s\n",A);
}

验证结果

image

posted @ 2024-05-06 19:15  luxiaolim  阅读(38)  评论(0)    收藏  举报