从字符串A中删除字符串B中存在的字母(不区分大小写)C语言实现

V1.0 2024年5月7日 发布于博客园

题目:

image

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

/**
 * @name      string
 * @brief     实现对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除
 * @param     strA 要处理的字符串
 * @param     strB 参照字符串
 * @date      2024/05/6
 * @version   1.0
 * @note
 */
void string(char *strA, char *strB)
{

	// 操作指针
	char *pstrB = strB;
	char *pResA = strA; // 用于存放结果
	char *pCurA = strA; // 逐一查找

	// 逐一操作字符串A并查找字符串B
	while (*pCurA != '\0') // 逐一查找
	{
		pstrB = strB; // 操作指针复位

		while (*pstrB != '\0' && *pCurA != '\0') // 对B从头到尾查找
		{
			// 判断字符串B的当前字符是否属于字母(大写字母 or 小写字母)
			if ((*pstrB < 'A' || *pstrB > 'Z') && (*pstrB < 'a' || *pstrB > 'z'))
			{
				// 如果字符串B的字符不是字母,则向后偏移
				pstrB++;
				continue;
			}
			// 字符B当前字符有效
			if (*pstrB > *pCurA)
			{
				if ((*pstrB - 32) == *pCurA) // 找到相同直接退出
				{
					break;
				}
			}
			else if (*pstrB == *pCurA)
			{
				break;
			}
			else if (*pstrB < *pCurA)
			{
				if ((*pstrB + 32) == *pCurA) // 找到相同直接退出
				{
					break;
				}
			}

			pstrB += 1;
		}
		if (*pstrB == '\0') // 在B中没有找到, 将合格字符写入结果中
		{
			*pResA = *pCurA;
			pResA += 1; // 指向后面一位
		}
		pCurA += 1;
	}
	*pResA = '\0'; // 字符串结束
}

测试

测试代码

/**
 * @file name : 从字符串A中删除字符串B中存在的字母(不区分大小写).c
 * @brief     : 实现对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除
 * @author    : RISE_AND_GRIND@163.com
 * @date      : 2024/05/6
 * @version   : 1.0
 * @note      :
 * CopyRight (c)  2023-2024   RISE_AND_GRIND@163.com   All Right Reseverd
 */
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

/**
 * @name      string
 * @brief     实现对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除
 * @param     strA 要处理的字符串
 * @param     strB 参照字符串
 * @date      2024/05/6
 * @version   1.0
 * @note
 */
void string(char *strA, char *strB)
{

	// 操作指针
	char *pstrB = strB;
	char *pResA = strA; // 用于存放结果
	char *pCurA = strA; // 逐一查找

	// 逐一操作字符串A并查找字符串B
	while (*pCurA != '\0') // 逐一查找
	{
		pstrB = strB; // 操作指针复位

		while (*pstrB != '\0' && *pCurA != '\0') // 对B从头到尾查找
		{
			// 判断字符串B的当前字符是否属于字母(大写字母 or 小写字母)
			if ((*pstrB < 'A' || *pstrB > 'Z') && (*pstrB < 'a' || *pstrB > 'z'))
			{
				// 如果字符串B的字符不是字母,则向后偏移
				pstrB++;
				continue;
			}
			// 字符B当前字符有效
			if (*pstrB > *pCurA)
			{
				if ((*pstrB - 32) == *pCurA) // 找到相同直接退出
				{
					break;
				}
			}
			else if (*pstrB == *pCurA)
			{
				break;
			}
			else if (*pstrB < *pCurA)
			{
				if ((*pstrB + 32) == *pCurA) // 找到相同直接退出
				{
					break;
				}
			}

			pstrB += 1;
		}
		if (*pstrB == '\0') // 在B中没有找到, 将合格字符写入结果中
		{
			*pResA = *pCurA;
			pResA += 1; // 指向后面一位
		}
		pCurA += 1;
	}
	*pResA = '\0'; // 字符串结束
}

int main(void)
{
	char strA[] = "aab. dc   / - Ad  ? Ef";
	char strB[] = "Ab.d";
	string(strA, strB);
	for (int i = 0; i < 1000; i++)
	{
		if (strA[i] == '\0')
		{
			break;
		}
		printf("%c", strA[i]);
	}
	printf(" \n");

	return 0;
}

测试结果

目标:aab. dc   / - Ad  ? Ef
参照:Ab.d
理论:. c   / -   ? Ef
实际:. c   / -   ? Ef 

image

posted @ 2024-05-07 00:17  舟清颺  阅读(17)  评论(0编辑  收藏  举报