V1.0 2024年5月7日 发布于博客园
题目:
设计一程序实现功能,处理字符串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并查找字符串Bwhile (*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并查找字符串Bwhile (*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