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

📄 cjkctype.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            string1 ++ ;
         }
         string1 ++ ;
      }
      string1 ++ ;
   }

   return NULL ;
}



////////////////////////////////////////////
//               strstri ()               //
////////////////////////////////////////////



// 暥帤楍偐傜 ignore case 偱暥帤楍傪専嶕乮MULTIBYTE斉乯
char *mbsstri_cp ( const char *string1, const char *string2, int codepage ) {

   size_t length1 = strlen ( string1 ) ;
   size_t length2 = strlen ( string2 ) ;

   if ( ! length2 ) return (char*) string1 ;

   const char *tail = string1 + length1 - length2 ;
   int c2 = tolower ( (unsigned char) *string2 ) ;

   while ( string1 <= tail ) {
      int c1 = tolower ( (unsigned char) *string1 ) ;
      if ( c1 == c2 && ! mbsnicmp_cp ( string1, string2, length2, codepage ) ) return (char*) string1 ;
      if ( ismbblead_cp ( (unsigned char) *string1, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string1 + 1 ), codepage ) ) {
            string1 ++ ;
            string1 ++ ;
         }
         string1 ++ ;
      }
      string1 ++ ;
   }

   return NULL ;
}



////////////////////////////////////////////
//               strrstr ()               //
////////////////////////////////////////////



// 暥帤楍偺枛旜偐傜暥帤楍傪専嶕乮MULTIBYTE斉乯
char *mbsrstr_cp ( const char *string1, const char *string2, int codepage ) {

   const char *result = NULL ;

   size_t length1 = strlen ( string1 ) ;
   size_t length2 = strlen ( string2 ) ;

   if ( ! length2 ) return (char*) string1 ;

   const char *tail = string1 + length1 - length2 ;
   int c2 = (unsigned char) *string2 ;

   while ( string1 <= tail ) {
      int c1 = (unsigned char) *string1 ;
      if ( c1 == c2 && ! strncmp ( string1, string2, length2 ) ) result = string1 ;
      if ( ismbblead_cp ( (unsigned char) *string1, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string1 + 1 ), codepage ) ) {
            string1 ++ ;
            string1 ++ ;
         }
         string1 ++ ;
      }
      string1 ++ ;
   }

   return (char*) result ;
}



////////////////////////////////////////////
//               strrstri ()              //
////////////////////////////////////////////



// 暥帤楍偺枛旜偐傜 ignore case 偱暥帤楍傪専嶕乮MULTIBYTE斉乯
char *mbsrstri_cp ( const char *string1, const char *string2, int codepage ) {

   const char *result = NULL ;

   size_t length1 = strlen ( string1 ) ;
   size_t length2 = strlen ( string2 ) ;

   if ( ! length2 ) return (char*) string1 ;

   const char *tail = string1 + length1 - length2 ;
   int c2 = tolower ( (unsigned char) *string2 ) ;

   while ( string1 <= tail ) {
      int c1 = tolower ( (unsigned char) *string1 ) ;
      if ( c1 == c2 && ! mbsnicmp_cp ( string1, string2, length2, codepage ) ) result = string1 ;
      if ( ismbblead_cp ( (unsigned char) *string1, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string1 + 1 ), codepage ) ) {
            string1 ++ ;
            string1 ++ ;
         }
         string1 ++ ;
      }
      string1 ++ ;
   }

   return (char*) result ;
}



////////////////////////////////////////////
//               strchr ()                //
////////////////////////////////////////////



// 暥帤楍偐傜暥帤傪専嶕乮MULTIBYTE斉乯
char *mbschr_cp ( const char *string, int c, int codepage ) {

   while ( *string ) {
      if ( ismbblead_cp ( (unsigned char) *string, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string + 1 ), codepage ) ) {
            if ( ! *( string + 2 ) || ! *( string + 3 ) ) break ;
            int c1 = ( (unsigned char) *( string + 0 ) << 8 ) | (unsigned char) *( string + 1 ) ;
            int c2 = ( (unsigned char) *( string + 2 ) << 8 ) | (unsigned char) *( string + 3 ) ;
            if ( c == ( ( c1 << 16 ) | c2 ) ) return (char*) string ;
            string ++ ;
            string ++ ;
            string ++ ;
            string ++ ;
         }
         else {
            if ( ! *( string + 1 ) ) break ;
            if ( c == ( ( (unsigned char) *string << 8 ) | (unsigned char) *( string + 1 ) ) ) return (char*) string ;
            string ++ ;
            string ++ ;
         }
      }
      else {
         if ( c == (unsigned char) *string ) return (char*) string ;
         string ++ ;
      }
   }

   return NULL ;
}



////////////////////////////////////////////
//               strchri ()               //
////////////////////////////////////////////



// 暥帤楍偐傜 ignore case 暥帤傪専嶕乮MULTIBYTE斉乯
char *mbschri_cp ( const char *string, int c, int codepage ) {

   c = tolower ( c ) ;

   while ( *string ) {
      if ( ismbblead_cp ( (unsigned char) *string, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string + 1 ), codepage ) ) {
            if ( ! *( string + 2 ) || ! *( string + 3 ) ) break ;
            int c1 = ( (unsigned char) *( string + 0 ) << 8 ) | (unsigned char) *( string + 1 ) ;
            int c2 = ( (unsigned char) *( string + 2 ) << 8 ) | (unsigned char) *( string + 3 ) ;
            if ( c == ( ( c1 << 16 ) | c2 ) ) return (char*) string ;
            string ++ ;
            string ++ ;
            string ++ ;
            string ++ ;
         }
         else {
            if ( ! *( string + 1 ) ) break ;
            if ( c == ( ( (unsigned char) *string << 8 ) | (unsigned char) *( string + 1 ) ) ) return (char*) string ;
            string ++ ;
            string ++ ;
         }
      }
      else {
         if ( c == tolower ( (unsigned char) *string ) ) return (char*) string ;
         string ++ ;
      }
   }

   return NULL ;
}



////////////////////////////////////////////
//               strrchr ()               //
////////////////////////////////////////////



// 暥帤楍偺枛旜偐傜暥帤傪専嶕乮MULTIBYTE斉乯
char *mbsrchr_cp ( const char *string, int c, int codepage ) {

   const char *result = NULL ;

   while ( *string ) {
      if ( ismbblead_cp ( (unsigned char) *string, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string + 1 ), codepage ) ) {
            if ( ! *( string + 2 ) || ! *( string + 3 ) ) break ;
            int c1 = ( (unsigned char) *( string + 0 ) << 8 ) | (unsigned char) *( string + 1 ) ;
            int c2 = ( (unsigned char) *( string + 2 ) << 8 ) | (unsigned char) *( string + 3 ) ;
            if ( c == ( ( c1 << 16 ) | c2 ) ) result = string ;
            string ++ ;
            string ++ ;
            string ++ ;
            string ++ ;
         }
         else {
            if ( ! *( string + 1 ) ) break ;
            if ( c == ( ( (unsigned char) *string << 8 ) | (unsigned char) *( string + 1 ) ) ) result = string ;
            string ++ ;
            string ++ ;
         }
      }
      else {
         if ( c == (unsigned char) *string ) result = string ;
         string ++ ;
      }
   }

   return (char*) result ;
}



////////////////////////////////////////////
//               strrchri ()              //
////////////////////////////////////////////



// 暥帤楍偺枛旜偐傜 ignore case 偱暥帤傪専嶕乮MULTIBYTE斉乯
char *mbsrchri_cp ( const char *string, int c, int codepage ) {

   const char *result = NULL ;

   c = tolower ( c ) ;

   while ( *string ) {
      if ( ismbblead_cp ( (unsigned char) *string, codepage ) ) {
         if ( ismbbsurrogate_cp ( (unsigned char) *( string + 1 ), codepage ) ) {
            if ( ! *( string + 2 ) || ! *( string + 3 ) ) break ;
            int c1 = ( (unsigned char) *( string + 0 ) << 8 ) | (unsigned char) *( string + 1 ) ;
            int c2 = ( (unsigned char) *( string + 2 ) << 8 ) | (unsigned char) *( string + 3 ) ;
            if ( c == ( ( c1 << 16 ) | c2 ) ) result = string ;
            string ++ ;
            string ++ ;
            string ++ ;
            string ++ ;
         }
         else {
            if ( ! *( string + 1 ) ) break ;
            if ( c == ( ( (unsigned char) *string << 8 ) | (unsigned char) *( string + 1 ) ) ) result = string ;
            string ++ ;
            string ++ ;
         }
      }
      else {
         if ( c == tolower ( (unsigned char) *string ) ) result = string ;
         string ++ ;
      }
   }

   return (char*) result ;
}



////////////////////////////////////////////

⌨️ 快捷键说明

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