⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chnsort.c

📁 经典的用于汉字内码比较的源码
💻 C
字号:
//=================================================
//   CHNSORT.C
//   两汉字串的笔划顺序比较动态库
//=================================================
//本程序用 MSVC++1.52 和 MSVC++5.0 编译通过
//   包含CHNSORT.DEF  
//   在 MSVC++1.52 下创建工程文件选 Windows Dynamic-link Library(.DLL) 类型
//   在 MSVC++5.0  下创建工程文件选 Win32 Dynamic-link Library(.DLL)  类型
//
#include <WINDOWS.H>
#include <string.h>
#include <math.h>

//汉字笔划顺序码表
WORD Order[8192]={
0x0000,0x0011,0x0013,0x00d0,0x0027,0x0028,0x0025,0x004c,0x1dbd,0x0003,
0x0024,0x0029,0x00d1,0x002a,0x002b,0x002c,0x002d,0x0046,0x0048,0x0032,
此处为通过 refer 生成的refer.txt 的内容
.......................
.......................

0x1c28,0x1c75,0x1cf0,0x1d23,0x1d22,0x1b7f,0x1c29,0x1d24,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000 };


#ifdef WIN32
//  32位Windows程序
BOOL WINAPI DllMain(HANDLE hModule,DWORD dwReason,LPVOID lpReserved)
{
  return TRUE;
}

#else
//  16位Windows程序
int FAR PASCAL LibMain(HANDLE hModule,WORD wDataSeg,WORD cbHeapSize,LPSTR lpszCmdLine)
{
   if (cbHeapSize != 0)
      UnlockData(0);
   return 1;
}

int FAR PASCAL WEP (int bSystemExit)
{
    return(1);
}

#endif

#define MAKEWORD(low, high) ((WORD)(((BYTE)(low)) | (((WORD)((BYTE)(high))) << 8)))

//从一字符串的指定位置取出一个字
WORD GetWord(LPSTR lpStr,LPWORD lpPos)
{
  BYTE bHigh,bLow;
  
  bHigh = lpStr[*lpPos] ;
  if ( bHigh<=128 )
    {
      *lpPos=*lpPos+1;
      return bHigh;
    } 
  else
    {
      bLow  = lpStr[*lpPos+1] ;
      *lpPos=*lpPos+2;
      return MAKEWORD(bLow,bHigh);
    } 
}

// 按笔划顺序比较字符串
// 返回值:

//    < 0  字符串1 先于 字符串2
//    = 0  字符串1 等于 字符串2
//    > 0  字符串1 后于 字符串2

// lpStr1  ---- 字符串1
// lpStr2  ---- 字符串2

int _export FAR PASCAL ChnStrComp(LPSTR lpStr1,LPSTR lpStr2)
{
  WORD wWord1,wWord2;
  int  nPos1,nPos2;
  int  nLeng1,nLeng2;
  int  nNo1,nNo2;
  
  nLeng1=strlen(lpStr1);
  nLeng2=strlen(lpStr2);
  
  nPos1=nPos2=0;
  while ( nPos1<nLeng1 && nPos2<nLeng2 )
  {
     wWord1=GetWord(lpStr1,&nPos1);
     wWord2=GetWord(lpStr2,&nPos2);
     if  ( nPos1<nPos2 )
       return -1;
     else  
      if  ( nPos1>nPos2 )
        return 1;
       else
        {  
           if ( wWord1 >128 )
           {
            nNo1=(HIBYTE(wWord1)-0xA1)*94+LOBYTE(wWord1)-0xA1;
            nNo2=(HIBYTE(wWord2)-0xA1)*94+LOBYTE(wWord2)-0xA1;
            if ( Order[nNo1]<Order[nNo2] )
               return -1;
            else  
              if ( Order[nNo1]>Order[nNo2] )
                 return 1;
            }
           else
            {
               if ( wWord1 <wWord2 )
                 return -1;
               else  
                 if ( wWord1 >wWord2 )
                   return 1;
            }      
        }
  }

  if  ( nLeng1<nLeng2 )
       return -1;
   else  
      if  ( nLeng1>nLeng2 )
         return 1;
       else
         return 0; 
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -