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

📄 stringex.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
📖 第 1 页 / 共 5 页
字号:
int strtailicmp ( const char *string, const char *tail ) {
   return strrnicmp ( string, tail, strlen ( tail ) ) ;
}



// 暥帤楍偺枛旜傪 ignore case 偱斾妑乮UNICODE斉乯
int wcstailicmp ( const wchar_t *string, const wchar_t *tail ) {
   return wcsrnicmp ( string, tail, wcslen ( tail ) ) ;
}



// 暥帤楍偺枛旜傪 ignore case 偱斾妑乮UTF32斉乯
int wcstailicmp32 ( const wchar32_t *string, const wchar32_t *tail ) {
   return wcsrnicmp32 ( string, tail, wcslen32 ( tail ) ) ;
}



// 暥帤楍偺枛旜傪 ignore case 偱斾妑乮MULTIBYTE斉乯
int mbstailicmp ( const char *string, const char *tail ) {
   return mbsrnicmp ( string, tail, strlen ( tail ) ) ;
}



////////////////////////////////////////////
//               strstr ()                //
////////////////////////////////////////////



// 暥帤楍偐傜暥帤楍傪専嶕乮UTF32斉乯
wchar32_t *wcsstr32 ( const wchar32_t *string1, const wchar32_t *string2 ) {

   size_t len1 = wcslen32 ( string1 ) ;
   size_t len2 = wcslen32 ( string2 ) ;

   if ( ! len2 ) return (wchar32_t*) string1 ;

   const wchar32_t *tail = string1 + len1 - len2 ;
   int c2 = *string2 ;

   while ( string1 <= tail ) {
      int c1 = *string1 ;
      if ( c1 == c2 && ! wcsncmp32 ( string1, string2, len2 ) ) return (wchar32_t*) string1 ;
      string1 ++ ;
   }

   return NULL ;
}



// 暥帤楍偐傜暥帤楍傪専嶕乮MULTIBYTE斉乯
char *mbsstr ( const char *string1, const char *string2 ) {

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

   const char *tail = string1 + len1 - len2 ;
   int c2 = (unsigned char) *string2 ;

   while ( string1 <= tail ) {
      int c1 = (unsigned char) *string1 ;
      if ( c1 == c2 && ! strncmp ( string1, string2, len2 ) ) return (char*) string1 ;
      if ( ismbblead ( (unsigned char) *string1 ) && *( string1 + 1 ) ) string1 ++ ;
      string1 ++ ;
   }

   return NULL ;
}



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



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

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

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

   while ( string1 <= tail ) {
      int c1 = tolower ( (unsigned char) *string1 ) ;
      if ( c1 == c2 && ! strnicmp ( string1, string2, len2 ) ) return (char*) string1 ;
      string1 ++ ;
   }

   return NULL ;
}



// 暥帤楍偐傜 ignore case 偱暥帤楍傪専嶕乮UNICODE斉乯
wchar_t *wcsstri ( const wchar_t *string1, const wchar_t *string2 ) {

   size_t len1 = wcslen ( string1 ) ;
   size_t len2 = wcslen ( string2 ) ;

   if ( ! len2 ) return (wchar_t*) string1 ;

   const wchar_t *tail = string1 + len1 - len2 ;
   int c2 = tolower ( *string2 ) ;

   while ( string1 <= tail ) {
      int c1 = tolower ( *string1 ) ;
      if ( c1 == c2 && ! wcsnicmp ( string1, string2, len2 ) ) return (wchar_t*) string1 ;
      string1 ++ ;
   }

   return NULL ;
}



// 暥帤楍偐傜 ignore case 偱暥帤楍傪専嶕乮UTF32斉乯
wchar32_t *wcsstri32 ( const wchar32_t *string1, const wchar32_t *string2 ) {

   size_t len1 = wcslen32 ( string1 ) ;
   size_t len2 = wcslen32 ( string2 ) ;

   if ( ! len2 ) return (wchar32_t*) string1 ;

   const wchar32_t *tail = string1 + len1 - len2 ;
   int c2 = tolower ( *string2 ) ;

   while ( string1 <= tail ) {
      int c1 = tolower ( *string1 ) ;
      if ( c1 == c2 && ! wcsnicmp32 ( string1, string2, len2 ) ) return (wchar32_t*) string1 ;
      string1 ++ ;
   }

   return NULL ;
}



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

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

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

   while ( string1 <= tail ) {
      int c1 = tolower ( (unsigned char) *string1 ) ;
      if ( c1 == c2 && ! mbsnicmp ( string1, string2, len2 ) ) return (char*) string1 ;
      if ( ismbblead ( (unsigned char) *string1 ) && *( string1 + 1 ) ) string1 ++ ;
      string1 ++ ;
   }

   return NULL ;
}



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



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

   const char *result = NULL ;

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

   const char *tail = string1 + len1 - len2 ;
   int c2 = (unsigned char) *string2 ;

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

   return (char*) result ;
}



// 暥帤楍偺枛旜偐傜暥帤楍傪専嶕乮UNICODE斉乯
wchar_t *wcsrstr ( const wchar_t *string1, const wchar_t *string2 ) {

   const wchar_t *result = NULL ;

   size_t len1 = wcslen ( string1 ) ;
   size_t len2 = wcslen ( string2 ) ;

   if ( ! len2 ) return (wchar_t*) string1 ;

   const wchar_t *tail = string1 + len1 - len2 ;
   int c2 = *string2 ;

   while ( string1 <= tail ) {
      int c1 = *string1 ;
      if ( c1 == c2 && ! wcsncmp ( string1, string2, len2 ) ) result = string1 ;
      string1 ++ ;
   }

   return (wchar_t*) result ;
}



// 暥帤楍偺枛旜偐傜暥帤楍傪専嶕乮UTF32斉乯
wchar32_t *wcsrstr32 ( const wchar32_t *string1, const wchar32_t *string2 ) {

   const wchar32_t *result = NULL ;

   size_t len1 = wcslen32 ( string1 ) ;
   size_t len2 = wcslen32 ( string2 ) ;

   if ( ! len2 ) return (wchar32_t*) string1 ;

   const wchar32_t *tail = string1 + len1 - len2 ;
   int c2 = *string2 ;

   while ( string1 <= tail ) {
      int c1 = *string1 ;
      if ( c1 == c2 && ! wcsncmp32 ( string1, string2, len2 ) ) result = string1 ;
      string1 ++ ;
   }

   return (wchar32_t*) result ;
}



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

   const char *result = NULL ;

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

   const char *tail = string1 + len1 - len2 ;
   int c2 = (unsigned char) *string2 ;

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

   return (char*) result ;
}



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



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

   const char *result = NULL ;

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

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

   while ( string1 <= tail ) {
      int c1 = tolower ( (unsigned char) *string1 ) ;
      if ( c1 == c2 && ! strnicmp ( string1, string2, len2 ) ) result = string1 ;
      string1 ++ ;
   }

   return (char*) result ;
}



// 暥帤楍偺枛旜偐傜 ignore case 偱暥帤楍傪専嶕乮UNICODE斉乯
wchar_t *wcsrstri ( const wchar_t *string1, const wchar_t *string2 ) {

   const wchar_t *result = NULL ;

   size_t len1 = wcslen ( string1 ) ;
   size_t len2 = wcslen ( string2 ) ;

   if ( ! len2 ) return (wchar_t*) string1 ;

   const wchar_t *tail = string1 + len1 - len2 ;
   int c2 = tolower ( *string2 ) ;

   while ( string1 <= tail ) {
      int c1 = tolower ( *string1 ) ;
      if ( c1 == c2 && ! wcsnicmp ( string1, string2, len2 ) ) result = string1 ;
      string1 ++ ;
   }

   return (wchar_t*) result ;
}



// 暥帤楍偺枛旜偐傜 ignore case 偱暥帤楍傪専嶕乮UTF32斉乯
wchar32_t *wcsrstri32 ( const wchar32_t *string1, const wchar32_t *string2 ) {

   const wchar32_t *result = NULL ;

   size_t len1 = wcslen32 ( string1 ) ;
   size_t len2 = wcslen32 ( string2 ) ;

   if ( ! len2 ) return (wchar32_t*) string1 ;

   const wchar32_t *tail = string1 + len1 - len2 ;
   int c2 = tolower ( *string2 ) ;

   while ( string1 <= tail ) {
      int c1 = tolower ( *string1 ) ;
      if ( c1 == c2 && ! wcsnicmp32 ( string1, string2, len2 ) ) result = string1 ;
      string1 ++ ;
   }

   return (wchar32_t*) result ;
}



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

   const char *result = NULL ;

   size_t len1 = strlen ( string1 ) ;
   size_t len2 = strlen ( string2 ) ;

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

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

   while ( string1 <= tail ) {
      int c1 = tolower ( (unsigned char) *string1 ) ;
      if ( c1 == c2 && ! mbsnicmp ( string1, string2, len2 ) ) result = string1 ;
      if ( ismbblead ( (unsigned char) *string1 ) && *( string1 + 1 ) ) string1 ++ ;
      string1 ++ ;
   }

   return (char*) result ;
}



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



// 暥帤楍偐傜暥帤傪専嶕乮UTF16斉乯
// c 偼僒儘僎乕僩偱傕僗僇儔乕抣偱傕壜
wchar16_t *wcschr16 ( const wchar16_t *string, int c ) {

   if ( ! IsHighSurrogate ( (unsigned) c >> 16 ) ) {
      if ( (unsigned) c > UTF16_MAX ) return NULL ;
      c = MAKE_UNICODE_SURROGATE ( c ) ;
   }

   while ( *string || ! c ) {
      if ( IsHighSurrogate ( *string ) ) {
         if ( ! *( string + 1 ) ) break ;
         if ( c == ( ( *string << 16 ) + *( string + 1 ) ) ) return (wchar16_t*) string ;
         string ++ ;
         string ++ ;
      }
      else {
         if ( c == *string ) return (wchar16_t*) string ;
         string ++ ;
      }
   }

   return NULL ;
}



// 暥帤楍偐傜暥帤傪専嶕乮UTF32斉乯
wchar32_t *wcschr32 ( const wchar32_t *string, int c ) {

   while ( *string || ! c ) {
      if ( (wchar32_t) c == *string ) return (wchar32_t*) string ;
      string ++ ;
   }

   return NULL ;
}



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

   while ( *string || ! c ) {
      if ( ismbblead ( (unsigned char) *string ) ) {
         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 暥帤傪専嶕乮ANSI斉乯
char *strchri ( const char *string, int c ) {

   c = tolower ( c ) ;

   while ( *string || ! c ) {
      if ( c == tolower ( (unsigned char) *string ) ) return (char*) string ;
      string ++ ;
   }

   return NULL ;
}



// 暥帤楍偐傜 ignore case 暥帤傪専嶕乮UNICODE斉乯
wchar_t *wcschri ( const wchar_t *string, int c ) {

   c = tolower ( c ) ;

   while ( *string || ! c ) {
      if ( c == tolower ( *string ) ) return (wchar_t*) string ;
      string ++ ;
   }

   return NULL ;
}



// 暥帤楍偐傜 ignore case 暥帤傪専嶕乮UTF16斉乯
// c 偼僒儘僎乕僩偱傕僗僇儔乕抣偱傕壜
wchar16_t *wcschri16 ( const wchar16_t *string, int c ) {

   if ( ! IsHighSurrogate ( (unsigned) c >> 16 ) ) {
      if ( (unsigned) c > UTF16_MAX ) return NULL ;
      c = MAKE_UNICODE_SURROGATE ( c ) ;
   }

   c = tolower ( c ) ;

   while ( *string || ! c ) {
      if ( IsHighSurrogate ( *string ) ) {
         if ( ! *( string + 1 ) ) break ;
         if ( c == ( ( *string << 16 ) + *( string + 1 ) ) ) return (wchar16_t*) string ;
         string ++ ;
         string ++ ;
      }
      else {
         if ( c == tolower ( *string ) ) return (wchar_t*) string ;
         string ++ ;

⌨️ 快捷键说明

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