鱼C论坛

 找回密码
 立即注册
查看: 1666|回复: 0

[技术交流] C语言版的vb字符串函数库

[复制链接]
发表于 2015-7-9 00:32:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
vb的字符串函数很好用,而c的却不怎么友好,于是写了C语言版的vb字符串函数库,大家包含头文件即可:
  1. /////////////////////////////////////////////////
  2. //                Description:                 //
  3. //            C Style VB Str Func              //
  4. //              Name:cvbstrfun.h               //
  5. //               Auther:Cyycoish               //
  6. //              ID:201506282102A               //
  7. //          (C) 2015 www.0xaa55.com            //
  8. //            All Rights Reserved.             //
  9. /////////////////////////////////////////////////
  10. #include <locale.h>
  11. #include <wchar.h>
  12. #include <tchar.h>
  13. #include <malloc.h>
  14. #define WCHR wchar_t
  15. //________________________
  16. //|   <Function Table>   |
  17. //|______________________|
  18. //|C Style    |VB Style  |
  19. //|-----------|----------|
  20. //|wslen      |Len       |
  21. //|wsucase    |UCase     |
  22. //|wsleft     |Left      |
  23. //|wsinverse  |StrReverse|
  24. //|wsright    |Right     |
  25. //|wsmid      |Mid       |
  26. //|wsinstr    |InStr     |
  27. //|wsltrim    |LTrim     |
  28. //|wsrtrim    |RTrim     |
  29. //|wsinstrrev |InStrRev  |
  30. //|___________|__________|
  31. /*
  32. int   wslen     (const WCHR* s);
  33. void  wsucase   (WCHR* s);
  34. void  wslcase   (WCHR* s);
  35. WCHR* wsleft    (const WCHR* szTar, int n);
  36. void  wsinverse (WCHR* szTar);
  37. WCHR* wsright   (const WCHR* szTar, int n);
  38. WCHR* wsmid     (const WCHR* szTar, int st, int n);
  39. int   wsinstr   (const WCHR* szTar, const WCHR* szCmp, int st);
  40. void  wsltrim   (WCHR* szTar);
  41. void  wsrtrim   (WCHR* szTar);
  42. int   wsinstrrev(const WCHR* szTar, const WCHR* szCmp, int st);
  43. */
  44. //String Functions
  45. int wslen(const WCHR* s)
  46. {
  47.         return wcslen(s);
  48. }
  49. void wsucase(WCHR* s)
  50. {
  51.         int i;
  52.         for (i = 0; i <= wcslen(s) - 1; i++)
  53.                 s[i] = towupper(s[i]);
  54.         return;
  55. }
  56. void wslcase(WCHR* s)
  57. {
  58.         int i;
  59.         for (i = 0; i <= wcslen(s) - 1; i++)
  60.                 s[i] = towlower(s[i]);
  61.         return;
  62. }
  63. WCHR* wsleft(const WCHR* szTar, int n)
  64. {
  65.         int i;
  66.         WCHR* rtn;
  67.         WCHR tmpWChr[2] = {'\0', '\0'};
  68.         if (n > wcslen(szTar))
  69.                 return L"";
  70.         rtn = (WCHR*)malloc(sizeof(WCHR) * (wcslen(szTar) + 1));
  71.         wcscpy(rtn, L"");
  72.         for (i = 0; i <= n - 1; i++)
  73.         {
  74.                 tmpWChr[0] = szTar[i];
  75.                 wcscat(rtn, tmpWChr);
  76.         }
  77.         return rtn;
  78. }
  79. void wsinverse(WCHR* szTar)
  80. {
  81.         int i, j, k;
  82.         WCHR* rtn;
  83.         k = wcslen(szTar);
  84.         rtn = (WCHR*)malloc(sizeof(WCHR) * (k + 1));
  85.         for (i = 0, j = k - 1; i < wcslen(szTar); i++, j--)
  86.         {
  87.                 rtn[j] = szTar[i];
  88.         }
  89.         rtn[i] = '\0';
  90.         wcscpy(szTar, rtn);
  91.         free(rtn);
  92. }
  93. WCHR* wsright(const WCHR* szTar, int n)
  94. {
  95.         int i, j, k;
  96.         WCHR* rtn;
  97.         WCHR tmpWChr[2] = {'\0', '\0'};
  98.         k = wcslen(szTar);
  99.         if (n > k)
  100.                 return L"";
  101.         rtn = (WCHR*)malloc(sizeof(WCHR) * (k + 1));
  102.         wcscpy(rtn, L"");
  103.         for (i = k - 1, j = 1; j <= n; i--, j++)
  104.         {
  105.                 tmpWChr[0] = szTar[i];
  106.                 wcscat(rtn, tmpWChr);
  107.         }
  108.         wsinverse(rtn);
  109.         return rtn;
  110. }
  111. WCHR* wsmid(const WCHR* szTar, int st, int n)
  112. {
  113.         int i;
  114.         WCHR* rtn;
  115.         WCHR tmpWChr[2] = {'\0', '\0'};
  116.         if ((st - 1 + n) > wcslen(szTar))
  117.                 return L"";
  118.         rtn = (WCHR*)malloc(sizeof(WCHR) * (wcslen(szTar) + 1));
  119.         wcscpy(rtn, L"");

  120.         for (i = st - 1; i <= st + n - 2; i++)
  121.         {
  122.                 tmpWChr[0] = szTar[i];
  123.                 wcscat(rtn, tmpWChr);
  124.         }
  125.         return rtn;
  126. }
  127. int wsinstr(const WCHR* szTar, const WCHR* szCmp, int st)
  128. {
  129.         int i;
  130.         if (st >= wcslen(szTar) - wcslen(szCmp))
  131.                 return -1;
  132.         for (i = st; i <= wcslen(szTar); i++)
  133.         {
  134.                 if (!wcscmp(szCmp, wsmid(szTar, i, wcslen(szCmp))))
  135.                         return i;
  136.         }
  137.         return -1;
  138. }
  139. void wsltrim(WCHR* szTar)
  140. {
  141.         int i;
  142.         int b = 0;
  143.         WCHR* rtn;
  144.         WCHR tmpWChr[2] = {'\0', '\0'};
  145.         rtn = (WCHR*)malloc(sizeof(WCHR) * (wcslen(szTar) + 1));
  146.         wcscpy(rtn, L"");
  147.         for (i = 0; i < wcslen(szTar); i++)
  148.         {
  149.                 tmpWChr[0] = szTar[i];
  150.                 if (tmpWChr[0] != ' ' || b != 0)
  151.                 {
  152.                         wcscat(rtn, tmpWChr);
  153.                         if (tmpWChr[0] != ' ' && b == 0)
  154.                                 b = !(b);
  155.                 }
  156.         }
  157.         wcscpy(szTar, rtn);
  158.         free(rtn);
  159. }
  160. void wsrtrim(WCHR* szTar)
  161. {
  162.         int i, j, k;
  163.         int b = 0;
  164.         WCHR* rtn;
  165.         WCHR tmpWChr[2] = {'\0', '\0'};
  166.         k = wcslen(szTar);
  167.         rtn = (WCHR*)malloc(sizeof(WCHR) * (k + 1));
  168.         wcscpy(rtn, L"");
  169.         for (i = k - 1, j = 0; j < k; i--, j++)
  170.         {
  171.                 tmpWChr[0] = szTar[i];
  172.                 if (tmpWChr[0] != ' ' || b != 0)
  173.                 {
  174.                         wcscat(rtn, tmpWChr);
  175.                         if (tmpWChr[0] != ' ' && b == 0)
  176.                                 b = !(b);
  177.                 }
  178.         }
  179.         wsinverse(rtn);
  180.         wcscpy(szTar, rtn);
  181.         free(rtn);
  182. }
  183. int wsinstrrev(const WCHR* szTar, const WCHR* szCmp, int st)
  184. {
  185.         int i;
  186.         for (i = wcslen(szTar) - wcslen(szCmp) + 1; i >= st; i--)
  187.                 if (!wcscmp(szCmp, wsmid(szTar, i, wcslen(szCmp))))
  188.                         return i;
  189.         return -1;
  190. }
  191. //End String Functions
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表