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

📄 string.cpp

📁 sleuthit-2.09 一个磁盘的工具集
💻 CPP
字号:
// Common/String.cpp#include "StdAfx.h"#ifdef _WIN32#include "StringConvert.h"#else#include <ctype.h>#endif#include "Common/String.h"#ifdef _WIN32#ifndef _UNICODEwchar_t MyCharUpper(wchar_t c){  if (c == 0)    return 0;  wchar_t *res = CharUpperW((LPWSTR)(unsigned int)c);  if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)    return (wchar_t)(unsigned int)res;  const int kBufferSize = 4;  char s[kBufferSize + 1];  int numChars = ::WideCharToMultiByte(CP_ACP, 0, &c, 1, s, kBufferSize, 0, 0);  if (numChars == 0 || numChars > kBufferSize)    return c;  s[numChars] = 0;  ::CharUpperA(s);  ::MultiByteToWideChar(CP_ACP, 0, s, numChars, &c, 1);  return c;}wchar_t MyCharLower(wchar_t c){  if (c == 0)    return 0;  wchar_t *res = CharLowerW((LPWSTR)(unsigned int)c);  if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)    return (wchar_t)(unsigned int)res;  const int kBufferSize = 4;  char s[kBufferSize + 1];  int numChars = ::WideCharToMultiByte(CP_ACP, 0, &c, 1, s, kBufferSize, 0, 0);  if (numChars == 0 || numChars > kBufferSize)    return c;  s[numChars] = 0;  ::CharLowerA(s);  ::MultiByteToWideChar(CP_ACP, 0, s, numChars, &c, 1);  return c;}wchar_t * MyStringUpper(wchar_t *s){  if (s == 0)    return 0;  wchar_t *res = CharUpperW(s);  if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)    return res;  AString a = UnicodeStringToMultiByte(s);  a.MakeUpper();  return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a));}wchar_t * MyStringLower(wchar_t *s){   if (s == 0)    return 0;  wchar_t *res = CharLowerW(s);  if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)    return res;  AString a = UnicodeStringToMultiByte(s);  a.MakeLower();  return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a));}#endif/*inline int ConvertCompareResult(int r) { return r - 2; }int MyStringCollate(const wchar_t *s1, const wchar_t *s2){   int res = CompareStringW(        LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1);   #ifdef _UNICODE  return ConvertCompareResult(res);  #else  if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)    return ConvertCompareResult(res);  return MyStringCollate(UnicodeStringToMultiByte(s1),         UnicodeStringToMultiByte(s2));  #endif}#ifndef _WIN32_WCEint MyStringCollate(const char *s1, const char *s2){   return ConvertCompareResult(CompareStringA(    LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1)); }int MyStringCollateNoCase(const char *s1, const char *s2){   return ConvertCompareResult(CompareStringA(    LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, s1, -1, s2, -1)); }#endifint MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2){   int res = CompareStringW(        LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, s1, -1, s2, -1);   #ifdef _UNICODE  return ConvertCompareResult(res);  #else  if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)    return ConvertCompareResult(res);  return MyStringCollateNoCase(UnicodeStringToMultiByte(s1),       UnicodeStringToMultiByte(s2));  #endif}*/#elsewchar_t MyCharUpper(wchar_t c){  return toupper(c);}/*int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2){   while (true)  {    wchar_t c1 = *s1++;    wchar_t c2 = *s2++;    wchar_t u1 = MyCharUpper(c1);    wchar_t u2 = MyCharUpper(c2);    if (u1 < u2) return -1;    if (u1 > u2) return 1;    if (u1 == 0) return 0;  }}*/#endifint MyStringCompare(const char *s1, const char *s2){   while (true)  {    unsigned char c1 = (unsigned char)*s1++;    unsigned char c2 = (unsigned char)*s2++;    if (c1 < c2) return -1;    if (c1 > c2) return 1;    if (c1 == 0) return 0;  }}int MyStringCompare(const wchar_t *s1, const wchar_t *s2){   while (true)  {    wchar_t c1 = *s1++;    wchar_t c2 = *s2++;    if (c1 < c2) return -1;    if (c1 > c2) return 1;    if (c1 == 0) return 0;  }}int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2){   while (true)  {    wchar_t c1 = *s1++;    wchar_t c2 = *s2++;    if (c1 != c2)    {      wchar_t u1 = MyCharUpper(c1);      wchar_t u2 = MyCharUpper(c2);      if (u1 < u2) return -1;      if (u1 > u2) return 1;    }    if (c1 == 0) return 0;  }}#ifdef _WIN32int MyStringCompareNoCase(const char *s1, const char *s2){   return MyStringCompareNoCase(MultiByteToUnicodeString(s1), MultiByteToUnicodeString(s2));}#endif

⌨️ 快捷键说明

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