- //保留字序列
- __declspec(thread) bool ReservedTable[65536] = {0};
- //清除或设置保留字状态
- void __fastcall SetAllReserved(bool Reserved = true)
- {
- for (int i = 0; i < 65536; i++) {
- ReservedTable[i] = Reserved;
- }
- }
- //设置保留字:
- //Word:被保留的字
- //Reserved:是否保留
- void __fastcall SetReserved(const wchar_t Word,bool Reserved = true)
- {
- ReservedTable[Word] = Reserved;
- }
- //检查是否存在非保留字
- bool __fastcall CheckAllReserved(const wchar_t *Src,size_t Count)
- {
- assert(Src);
- wchar_t *p = (wchar_t *)Src;
- while (*p){
- if (!ReservedTable[*p++]) {
- return false;
- }
- }
- return true;
- }
- //检查是否存在保留字
- bool __fastcall CheckAllUnReserved(const wchar_t *Src,size_t Count)
- {
- assert(Src);
- wchar_t *p = (wchar_t *)Src;
- while (*p){
- if (ReservedTable[*p++]) {
- return false;
- }
- }
- return true;
- }
- //删除非保留字
- wchar_t * __fastcall RemoveReserved(const wchar_t *Src,size_t Count)
- {
- assert(Src);
- wchar_t *pSrc = (wchar_t *)Src;
- wchar_t *pDst = pSrc;
- while (*pSrc){
- if (!ReservedTable[*pSrc]) {
- *pDst++ = *pSrc;
- }
- pSrc ++;
- }
- *pDst = L'/0';
- return (wchar_t *)Src;
- }
- //删除保留字
- wchar_t * __fastcall RemoveUnReserved(const wchar_t *Src,size_t Count)
- {
- assert(Src);
- wchar_t *pSrc = (wchar_t *)Src;
- wchar_t *pDst = pSrc;
- while (*pSrc){
- if (ReservedTable[*pSrc]) {
- *pDst++ = *pSrc;
- }
- pSrc ++;
- }
- *pDst = L'/0';
- return (wchar_t *)Src;
- }
应用示例:
- //预设保留字
- SetReserved(L'泄',true);
- //测试串1
- wchar_t *Src = L"在中国药有很多种";
- ShowMessage(BoolToStr(CheckAllUnReserved(Src,wcslen(Src)),true));
- wchar_t *Src1 = L"在中国泄药有很多种";
- ShowMessage(BoolToStr(CheckAllUnReserved(Src,wcslen(Src)),true));
- ShowMessage(RemoveReserved(Src1,wcslen(Src1)));