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並查詢字串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