成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

代碼演示VB.NET文件名排序案例

開發 后端
本文主要解決VB.NET文件名排序的問題,如果你輸入 : a1,a2,a10,a001 我們知道,如果按照字符串比較,結果應該是 a001,a1,a10,a2,但我們期望的結果應該是a001,a1,a2,a10.我們為你解決這個問題,代碼詳細。

文件多了我們找起來會很困難,我們現在來做一個關于VB.NET文件名排序的一個小案例,以后你的文件都會按一定的順序排列,也加快你的查詢速度。

VB.NET文件名排序案例:

輸入 : a1,a2,a10,a001 。我們知道,如果按照字符串比較,結果應該是 a001,a1,a10,a2,但我們期望的結果應該是a001,a1,a2,a10.

自己寫了一個VB.NET文件名排序算法,請參考,或者有更好的算法,請賜教

  1. VB.NET code /*  
  2. Return Value Description  
  3. < 0  arg1 less than arg2  
  4. 0  arg1 equivalent to arg2  
  5. > 0  arg1 greater than arg2  
  6. */  
  7. int compare(const void* arg1,const void* arg2)  
  8. {  
  9. if (NULL==arg1||NULL==arg2)//address of item  
  10. return 0;  
  11. LPSTR lpText1 = *( TCHAR** )arg1; //content of item  
  12. LPSTR lpText2 = *( TCHAR** )arg2; //content of item  
  13. if (NULL==lpText1||NULL==lpText2)  
  14. return 0;  
  15. int nText1Len = _tcslen(lpText1);  
  16. int nText2Len = _tcslen(lpText2);  
  17. int nText1IndexHandled = 0;  
  18. int nText2IndexHandled = 0;  
  19. int nRet = 0;  
  20. for (;;)  
  21. {  
  22. if (nText1IndexHandled==nText1Len||nText2IndexHandled==nText2Len) //don't compare complete since all are same, "ab","abc"  
  23. {  
  24. TCHAR chOffset1 = nText1IndexHandled<nText1Len?lpText1[nText1IndexHandled]:0;  
  25. TCHAR chOffset2 = nText2IndexHandled<nText2Len?lpText2[nText2IndexHandled]:0;  
  26. nRet = (int)((WORD)chOffset1-(WORD)chOffset2);  
  27. break;  
  28. }  
  29. TCHAR ch1 = *(lpText1+nText1IndexHandled);  
  30. TCHAR ch2 = *(lpText2+nText2IndexHandled);  
  31. if (isdigit(ch1)&&isdigit(ch2)) // if digit, change to number and compare  
  32. {  
  33. TCHAR* lpNum1 = new TCHAR[nText1Len];  
  34. TCHAR* lpNum2 = new TCHAR[nText2Len];  
  35. if (NULL==lpNum1||NULL==lpNum2)  
  36. return 0;  
  37. memset(lpNum1,0,nText1Len*sizeof(TCHAR));  
  38. memset(lpNum2,0,nText2Len*sizeof(TCHAR));  
  39. extractnumber(lpText1,nText1Len,nText1IndexHandled,lpNum1);  
  40. extractnumber(lpText2,nText2Len,nText2IndexHandled,lpNum2);  
  41. nRet = comparenumber(lpNum1,lpNum2);  
  42. delete[] lpNum1;  
  43. delete[] lpNum2;  
  44. }  
  45. else  
  46. {  
  47. nRet = (int)((WORD)ch1-(WORD)ch2);  
  48. nText1IndexHandled++;  
  49. nText2IndexHandled++;  
  50. }  
  51. if (nRet!=0)  
  52. break;  
  53. }  
  54. return nRet;  
  55. }  
  56. TCHAR* extractnumber(TCHAR* lpBuf,int nLen,int& nIndexBegin,TCHAR* lpNumber)  
  57. {  
  58. if (NULL==lpBuf||NULL==lpNumber)  
  59. return lpNumber;  
  60. for (int i=nIndexBegin,nIndex=0;i<nLen;++i,++nIndexBegin)  
  61. {  
  62. TCHAR ch = *(lpBuf+i);  
  63. if (!isdigit(ch))  
  64. break;  
  65. lpNumber[nIndex++]=ch;  
  66. }  
  67. return lpNumber;  
  68. }  
  69. int comparenumber(TCHAR* lpNumber1,TCHAR* lpNumber2)  
  70. {  
  71. if (NULL==lpNumber1||NULL==lpNumber2)  
  72. return 0;  
  73. int nNum1Len = _tcslen(lpNumber1);  
  74. int nNum2Len = _tcslen(lpNumber2);  
  75. int nMaxLen = max(nNum1Len,nNum2Len);  
  76. TCHAR* lpFormatNum1 = new TCHAR[nMaxLen+1];  
  77. TCHAR* lpFormatNum2 = new TCHAR[nMaxLen+1];  
  78. if (NULL==lpFormatNum1||NULL==lpFormatNum2)  
  79. return 0;  
  80. memset(lpFormatNum1,_T('0'),nMaxLen*sizeof(TCHAR));  
  81. memset(lpFormatNum2,_T('0'),nMaxLen*sizeof(TCHAR));  
  82. lpFormatNum1[nMaxLen]=0;  
  83. lpFormatNum2[nMaxLen]=0;  
  84. int nPos = 0nRet = 0;  
  85. int nIndex = nMaxLen-1;  
  86. for (nPos=nNum1Len-1;nPos>=0;--nPos)  
  87. lpFormatNum1[nIndex--]=lpNumber1[nPos];  
  88. nIndex = nMaxLen-1;  
  89. for (nPos=nNum2Len-1;nPos>=0;--nPos)  
  90. lpFormatNum2[nIndex--]=lpNumber2[nPos];  
  91. for (nPos=0;nPos<nMaxLen;++nPos)  
  92. {  
  93. nRet = lpFormatNum1[nPos]-lpFormatNum2[nPos];  
  94. if (nRet!=0)  
  95. break;  
  96. }  
  97. delete[] lpFormatNum1;  
  98. delete[] lpFormatNum2;  
  99. return nRet;  

【編輯推薦】

  1. 實例講述VB.NET使用Log4Net
  2. 三分鐘學會VB.NET轉換形態
  3. VB.NET獲取硬盤信息四大法寶
  4. 講述VB.NET調用Excel的好處
  5. 簡單例子概述VB.NET新窗體
責任編輯:田樹 來源: 博客
相關推薦

2010-01-14 10:07:08

VB.NET文件名排序

2009-11-02 09:45:23

VB.NET文件系統對

2009-11-02 11:13:06

VB.NET讀寫文件

2009-11-03 11:06:40

VB.NET事件

2009-10-29 13:46:14

VB.NET DES加

2009-10-26 11:04:36

VB.NET UDP協

2009-10-29 14:02:24

VB和VB.NET比較

2009-11-03 10:18:46

VB.NET繼承

2009-11-02 10:53:34

VB.NET INI文

2009-10-28 15:18:46

VB.NET網絡應用

2009-10-29 15:02:04

VB.NET文件排序

2009-11-02 16:55:50

VB.NET Smar

2009-10-26 09:50:20

VB.NET Star

2009-10-29 16:46:32

VB.NET語言

2009-10-26 14:50:18

VB.NET遍歷注冊表

2009-10-26 10:30:57

VB.NET處理FTP

2009-10-30 13:31:06

VB.NET名空間

2009-10-28 11:27:34

VB.NET資源文件

2010-01-20 13:42:10

VB.NET訪問INIGetPrivateP

2009-10-27 16:36:46

VB.NET文件流
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频在线一区 | 久久久久国产精品午夜一区 | 国产99精品 | 中文字幕国产视频 | 欧美 日韩 中文 | 久久国产一区二区三区 | 第一福利社区1024 | 国产乱码久久久久久 | 欧美日韩高清在线一区 | 国产精品久久久久久久久免费高清 | 台湾a级理论片在线观看 | 日日夜夜免费精品视频 | 久久av一区二区三区 | 狠狠干五月天 | 免费v片| 亚州一区二区三区 | 欧美一级免费看 | 99精品欧美一区二区三区 | 午夜影院在线观看视频 | 91欧美| 日韩一区二区三区av | 麻豆天堂 | 日韩欧美在线一区 | 中文字幕影院 | 成人毛片视频在线播放 | 亚洲一区日韩 | 亚洲精品二三区 | 成人在线视频网站 | 99伊人 | 国产精品mv在线观看 | 精品中文在线 | 亚洲毛片在线 | 欧美一级全黄 | 午夜精品久久久久久久久久久久久 | 日韩av免费看 | 亚洲精品一区中文字幕乱码 | 国产欧美精品区一区二区三区 | 欧美日韩黄色一级片 | 西西裸体做爰视频 | av中文字幕在线播放 | 国产成人a亚洲精品 |