/*****************************************************************//** * \file PayrollProcessing.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月6日 塗聚文 Geovin Du Visual Studio 2022 edit.文章來源《C++新經典設計模式》 王健偉編著 清華大學出版社 * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef PAYROLLPROCESSING_H #define PAYROLLPROCESSING_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> using namespace std; namespace DuJewelryChainOfResponsibilityPattern { /// <summary> /// 薪水處理類 /// </summary> class PayrollProcessing { public: /// <summary> /// 處理加薪請求 /// </summary> /// <param name="sname">員工姓名</param> /// <param name="salfigure">加薪多少</param> void raiseSalaryRequest(const string& sname, int salfigure) //參數1代表要加薪的員工名字,參數2代表求要加薪多少 { if (salfigure <= 1000) { //加薪要求不超過1000,部門經理可以批准 depmentManagerApprove(sname, salfigure); } else if (salfigure <= 5000) { //加薪要求在1000元之上但不超過5000,技術總監才能批准 CTOApprove(sname, salfigure); } else { //加薪要求超過5000元,總經理才能批准 generalManagerApprove(sname, salfigure); } } private: /// <summary> /// 部門經理審批加薪請求 /// </summary> /// <param name="sname">員工姓名</param> /// <param name="salfigure">加薪多少</param> void depmentManagerApprove(const string& sname, int salfigure) { cout << sname << "的加薪要求爲:" << salfigure << "元,部門經理審批通過!" << endl; } /// <summary> /// 技術總監審批加薪請求 /// </summary> /// <param name="sname">員工姓名</param> /// <param name="salfigure">加薪多少</param> void CTOApprove(const string& sname, int salfigure) { cout << sname << "的加薪要求爲:" << salfigure << "元,技術總監審批通過!" << endl; } /// <summary> /// 總經理審批加薪請求 /// </summary> /// <param name="sname">員工姓名</param> /// <param name="salfigure">加薪多少</param> void generalManagerApprove(const string& sname, int salfigure) { cout << sname << "的加薪要求爲:" << salfigure << "元,總經理審批通過!" << endl; } }; } #endif /*****************************************************************//** * \file ParentSalaryApprover.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef PARENTSALARYAPPROVER_H #define PARENTSALARYAPPROVER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "RaiseSalaryRequest.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 薪水審批者父類 /// </summary> class ParentSalaryApprover { public: /// <summary> /// /// </summary> ParentSalaryApprover() :nextChain(nullptr) {} /// <summary> /// 做父類時析構函數應該爲虛函數 /// </summary> virtual ~ParentSalaryApprover() {} /// <summary> /// 設置指向的職責鏈中的下個審批者 /// </summary> /// <param name="next"></param> void setNextChain(ParentSalaryApprover* next) { nextChain = next; } /// <summary> /// 處理加薪請求 /// </summary> /// <param name="req"></param> virtual void processRequest(const RaiseSalaryRequest& req) = 0; protected: /// <summary> /// 找鏈中的下個對象並把請求投遞給下個鏈中的對象 /// </summary> /// <param name="req"></param> void sendRequestToNextHandler(const RaiseSalaryRequest& req) { //找鏈中的下個對象 if (nextChain != nullptr) { //把請求投遞給鏈中的下個對象 nextChain->processRequest(req); } else { //沒找到鏈中的下個對象,程序流程執行這裏似乎不應該 cout << req.getName() << "的加薪要求爲:" << req.getSalFigure() << "元,但無人能夠審批!" << endl; } } private: /// <summary> /// /// </summary> ParentSalaryApprover* nextChain; //指向下一個審批者(對象)的多態指針(指向自身類型),每個都指向下一個,就會構成一個職責鏈(鏈表) }; } #endif /*****************************************************************//** * \file GeneralManagerApprove.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GENERALMANAGERAPPROVER_H #define GENERALMANAGERAPPROVER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "RaiseSalaryRequest.h" #include "ParentSalaryApprover.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 總經理子類 /// </summary> class GeneralManagerApprove :public ParentSalaryApprover { public: /// <summary> /// 處理加薪請求 /// </summary> /// <param name="req"></param> virtual void processRequest(const RaiseSalaryRequest& req) { int salfigure = req.getSalFigure(); if (salfigure > 5000) { //如果自己能處理,則自己處理 cout << req.getName() << "的加薪要求爲:" << salfigure << "元,總經理審批通過!" << endl; } else { sendRequestToNextHandler(req);//自己不能處理,嘗試找鏈中的下個對象來處理 } } }; } #endif /*****************************************************************//** * \file CTOApprove.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef CTOAPPROVER_H #define CTOAPPROVER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "RaiseSalaryRequest.h" #include "ParentSalaryApprover.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 技術總監子類 /// </summary> class CTOApprove :public ParentSalaryApprover { public: /// <summary> /// 處理加薪請求 /// </summary> /// <param name="req"></param> virtual void processRequest(const RaiseSalaryRequest& req) { int salfigure = req.getSalFigure(); if (salfigure > 1000 && salfigure <= 5000) { //如果自己能處理,則自己處理 cout << req.getName() << "的加薪要求爲:" << salfigure << "元,技術總監審批通過!" << endl; } else { sendRequestToNextHandler(req);//自己不能處理,嘗試找鏈中的下個對象來處理 } } }; } #endif /*****************************************************************//** * \file DepmentManagerApprove.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef DEPMENTMANAGERAPPROVER_H #define DEPMENTMANAGERAPPROVER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "RaiseSalaryRequest.h" #include "ParentSalaryApprover.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 部門經理子類 /// </summary> class DepmentManagerApprove:public ParentSalaryApprover { public: /// <summary> /// 處理加薪請求 /// </summary> /// <param name="req"></param> virtual void processRequest(const RaiseSalaryRequest& req) { int salfigure = req.getSalFigure(); if (salfigure <= 1000) { //如果自己能處理,則自己處理 cout << req.getName() << "的加薪要求爲:" << salfigure << "元,部門經理審批通過!" << endl; } else { //自己不能處理,嘗試找鏈中的下個對象來處理 sendRequestToNextHandler(req); } } }; } #endif /*****************************************************************//** * \file RaiseSalaryRequest.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef RAISESALARYREQUEST_H #define RAISESALARYREQUEST_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 加薪請求類 /// </summary> class RaiseSalaryRequest { public: /// <summary> /// 構造函數 /// </summary> /// <param name="sname"></param> /// <param name="salfigure"></param> RaiseSalaryRequest(const string& sname, int salfigure) :mName(sname), misalFigure(salfigure) {} /// <summary> /// 獲取請求加薪的人員名字 /// </summary> /// <returns></returns> const string& getName() const { return mName; } /// <summary> /// 獲取請求加薪的數字 /// </summary> /// <returns></returns> int getSalFigure() const { return misalFigure; } private: /// <summary> /// 請求加薪的人員名字 /// </summary> string mName; /// <summary> /// 請求加薪的數字 /// </summary> int misalFigure; }; } #endif /*****************************************************************//** * \file ParentWordFilter.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef PARENTWORDFILTER_H #define PARENTWORDFILTER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// /// </summary> class ParentWordFilter { public: /// <summary> /// /// </summary> ParentWordFilter() :nextChain(nullptr) {} /// <summary> /// 做父類時析構函數應該爲虛函數 /// </summary> virtual ~ParentWordFilter() {} /// <summary> /// 設置指向的職責鏈中的下個過濾器 /// </summary> /// <param name="next"></param> void setNextChain(ParentWordFilter* next) { nextChain = next; } /// <summary> /// 處理敏感詞過濾請求 /// </summary> /// <param name="strWord"></param> /// <returns></returns> virtual string processRequest(string strWord) = 0; protected: /// <summary> /// 找鏈中的下個對象並把請求投遞給下個鏈中的對象 /// </summary> /// <param name="strWord"></param> /// <returns></returns> string sendRequestToNextHandler(string strWord) { //找鏈中的下個對象 if (nextChain != nullptr) { //把請求投遞給鏈中的下個對象 return nextChain->processRequest(strWord); } return strWord; } private: /// <summary> /// /// </summary> ParentWordFilter* nextChain; }; } #endif /*****************************************************************//** * \file SexyWordFilter.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef SEXWORDFILTER_H #define SEXWORDFILTER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "ParentWordFilter.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// /// </summary> class SexyWordFilter:public ParentWordFilter { public: /// <summary> /// /// </summary> /// <param name="strWord"></param> /// <returns></returns> virtual string processRequest(string strWord) { cout << "通過與詞庫比對,在strWord中查找\"性\"敏感詞並用XXX來替換!" << endl; strWord += "XXX"; //測試代碼,具體的實現邏輯略...... return sendRequestToNextHandler(strWord); } }; } #endif /*****************************************************************//** * \file DirtyWordFilter.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef DIRTYWORDFILTER_H #define DIRTYWORDFILTER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "ParentWordFilter.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 髒話詞過濾器子類 /// </summary> class DirtyWordFilter :public ParentWordFilter { public: virtual string processRequest(string strWord) { cout << "通過與詞庫比對,在strWord中查找\"髒話\"敏感詞並用YYY來替換!" << endl; strWord += "YYY"; return sendRequestToNextHandler(strWord); } }; } #endif /*****************************************************************//** * \file PoliticsWordFilter.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit. * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef POLITICSWORDFILTER_H #define POLITICSWORDFILTER_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "ParentWordFilter.h" using namespace std; namespace DuChainOfResponsibilityPattern { /// <summary> /// 政治敏感詞過濾器子類 /// </summary> class PoliticsWordFilter :public ParentWordFilter { public: virtual string processRequest(string strWord) { cout << "通過與詞庫比對,在strWord中查找\"政治\"敏感詞並用ZZZ來替換!" << endl; strWord += "ZZZ"; return sendRequestToNextHandler(strWord); } }; } #endif /*****************************************************************//** * \file GeovinDu.h * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月6日 塗聚文 Geovin Du Visual Studio 2022 edit.文章來源《C++新經典設計模式》 王健偉編著 清華大學出版社 * \author geovindu * \date June 2023 *********************************************************************/ #pragma once #ifndef GEOVINDU_H #define GEOVINDU_H #include<cstring> #include<stdbool.h> #include<stdlib.h> #include<iostream> #include<malloc.h> #include<cmath> #include <iostream> #include <sstream> #include <vector> #include <algorithm> #include <array> #include <functional> #include <list> #include <string> #include <string.h> #include <vector> #include <map> #include "PayrollProcessing.h" #include "RaiseSalaryRequest.h" #include "ParentSalaryApprover.h" #include "DepmentManagerApprove.h" #include "CTOApprove.h" #include "GeneralManagerApprove.h" #include "ParentWordFilter.h" #include "DirtyWordFilter.h" #include "SexyWordFilter.h" #include "PoliticsWordFilter.h" using namespace std; namespace DuJewelryChainOfResponsibilityPattern { /// <summary> /// /// </summary> class GeovinDu { private: public: /// <summary> /// /// </summary> void displaySimple(); /// <summary> /// /// </summary> void displayDuSimple(); /// <summary> /// /// </summary> void displayWordSimple(); }; } #endif /*****************************************************************//** * \file GeovinDu.cpp * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月7日 塗聚文 Geovin Du Visual Studio 2022 edit.文章來源《C++新經典設計模式》 王健偉編著 清華大學出版社 * \author geovindu * \date June 2023 *********************************************************************/ #include "GeovinDu.h" using namespace std; using namespace DuChainOfResponsibilityPattern; namespace DuJewelryChainOfResponsibilityPattern { /// <summary> /// /// </summary> void GeovinDu::displaySimple() { DuJewelryChainOfResponsibilityPattern::PayrollProcessing sh; sh.raiseSalaryRequest("張三", 15000); //張三要求加薪1.5萬 sh.raiseSalaryRequest("李四", 3500); //李四要求加薪3千5 sh.raiseSalaryRequest("王二", 800); //王二要求加薪8百 } /// <summary> /// /// </summary> void GeovinDu::displayDuSimple() { //(1)創建出職責鏈中包含的各個對象(部門經理、技術總監、總經理) DuChainOfResponsibilityPattern::ParentSalaryApprover* pzzlinkobj1 = new DuChainOfResponsibilityPattern::DepmentManagerApprove(); DuChainOfResponsibilityPattern::ParentSalaryApprover* pzzlinkobj2 = new DuChainOfResponsibilityPattern::CTOApprove(); DuChainOfResponsibilityPattern::ParentSalaryApprover* pzzlinkobj3 = new DuChainOfResponsibilityPattern::GeneralManagerApprove(); //(2)將這些對象串在一起構成職責鏈(鏈表),現在職責鏈中pzzlinkobj1排在最前面,pzzlinkobj3排在最後面 pzzlinkobj1->setNextChain(pzzlinkobj2); pzzlinkobj2->setNextChain(pzzlinkobj3); pzzlinkobj3->setNextChain(nullptr); //可以不寫此行,因爲ParSalApprover構造函數中設置了m_nextChain爲nullptr //(3)創建幾位員工關於加薪的請求(對象) DuChainOfResponsibilityPattern::RaiseSalaryRequest emp1Req("張三", 15000);//張三要求加薪1.5萬 DuChainOfResponsibilityPattern::RaiseSalaryRequest emp2Req("李四", 3500);//李四要求加薪3千5 DuChainOfResponsibilityPattern::RaiseSalaryRequest emp3Req("王二", 800);//王二要求加薪8百 //看看每位員工的加薪請求由職責鏈中的哪個對象(部門經理、技術總監、總經理)來處理,從職責鏈中排在最前面的接收者(pzzlinkobj1)開始 pzzlinkobj1->processRequest(emp1Req); pzzlinkobj1->processRequest(emp2Req); pzzlinkobj1->processRequest(emp3Req); //(4)釋放資源 delete pzzlinkobj1; delete pzzlinkobj2; delete pzzlinkobj3; } /// <summary> /// /// </summary> void GeovinDu::displayWordSimple() { //(1)創建出職責鏈中包含的各個對象(性敏感詞過濾器、髒話詞過濾器、政治敏感詞過濾器) DuChainOfResponsibilityPattern::ParentWordFilter* pwflinkobj1 = new DuChainOfResponsibilityPattern::SexyWordFilter(); DuChainOfResponsibilityPattern::ParentWordFilter* pwflinkobj2 = new DuChainOfResponsibilityPattern::DirtyWordFilter(); DuChainOfResponsibilityPattern::ParentWordFilter* pwflinkobj3 = new DuChainOfResponsibilityPattern::PoliticsWordFilter(); //(2)將這些對象串在一起構成職責鏈(鏈表),現在職責鏈中pwflinkobj1排在最前面,pwflinkobj3排在最後面 pwflinkobj1->setNextChain(pwflinkobj2); pwflinkobj2->setNextChain(pwflinkobj3); pwflinkobj3->setNextChain(nullptr); string strWordFilterResult = pwflinkobj1->processRequest("你好,這裏是過濾敏感詞測試範例"); //從職責鏈中排在最前面的接收者(pwflinkobj1)開始,processRequest的參數代表的是聊天內容 cout << "對敏感詞過濾後的結果爲:" << strWordFilterResult << endl; //(3)釋放資源 delete pwflinkobj1; delete pwflinkobj2; delete pwflinkobj3; } }
調用:
/*****************************************************************//** * \file ConsoleDuChainOfResponsibilityPattern.cpp * \brief 責任鏈模式Chain Of Responsibility Pattern 亦稱: 職責鏈模式、命令鏈、CoR、Chain of Command、Chain of Responsibility C++ 14 行爲模式 * 2023年6月6日 塗聚文 Geovin Du Visual Studio 2022 edit.文章來源《C++新經典設計模式》 王健偉編著 清華大學出版社 * \author geovindu * \date June 2023 *********************************************************************/ // ConsoleDuChainOfResponsibilityPattern.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。 // #define _UNICODE #include <iostream> #include "GeovinDu.h" using namespace std; using namespace DuChainOfResponsibilityPattern; using namespace DuJewelryChainOfResponsibilityPattern; int main() { std::cout << "Hello World!塗聚文 Geovin Du\n"; GeovinDu geovin; geovin.displaySimple(); cout << "******************" << endl; geovin.displayDuSimple(); cout << "*****" << endl; geovin.displayWordSimple(); system("pause"); return 0; } // 運行程序: Ctrl + F5 或調試 >“開始執行(不調試)”菜單 // 調試程序: F5 或調試 >“開始調試”菜單 // 入門使用技巧: // 1. 使用解決方案資源管理器窗口添加/管理文件 // 2. 使用團隊資源管理器窗口連接到源代碼管理 // 3. 使用輸出窗口查看生成輸出和其他消息 // 4. 使用錯誤列表窗口查看錯誤 // 5. 轉到“項目”>“添加新項”以創建新的代碼文件,或轉到“項目”>“添加現有項”以將現有代碼文件添加到項目 // 6. 將來,若要再次打開此項目,請轉到“文件”>“打開”>“項目”並選擇 .sln 文件 #define UNICODE
輸出
Hello World!塗聚文 Geovin Du 張三的加薪要求爲:15000元,總經理審批通過! 李四的加薪要求爲:3500元,技術總監審批通過! 王二的加薪要求爲:800元,部門經理審批通過! ****************** 張三的加薪要求爲:15000元,總經理審批通過! 李四的加薪要求爲:3500元,技術總監審批通過! 王二的加薪要求爲:800元,部門經理審批通過! ***** 通過與詞庫比對,在strWord中查找"性"敏感詞並用XXX來替換! 通過與詞庫比對,在strWord中查找"髒話"敏感詞並用YYY來替換! 通過與詞庫比對,在strWord中查找"政治"敏感詞並用ZZZ來替換! 對敏感詞過濾後的結果爲:你好,這裏是過濾敏感詞測試範例XXXYYYZZZ 請按任意鍵繼續. . .