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

思路
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);
}
验证结果


浙公网安备 33010602011771号