文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

VB.NET中怎么实现按文件名排序

2023-06-17 18:01

关注

今天就跟大家聊聊有关VB.NET中怎么实现按文件名排序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

输入 : a1,a2,a10,a001

我们知道,如果按照字符串比较,结果应该是 a001,a1,a10,a2,但我们期望的结果应该是a001,a1,a2,a10.

自己写了一个VB.NET文件名排序的算法,请参考,或者有更好的算法,请赐教

  1. int compare(const void* arg1,const
     void* arg2)  

  2. {  

  3. if (NULL==arg1||NULL==arg2)
    //address of item  

  4. return 0;  

  5. LPSTR lpText1 = *( TCHAR** )arg1; 
    //content of item  

  6. LPSTR lpText2 = *( TCHAR** )arg2; 
    //content of item  

  7. if (NULL==lpText1||NULL==lpText2)  

  8. return 0;  

  9. int nText1Len = _tcslen(lpText1);  

  10. int nText2Len = _tcslen(lpText2);  

  11. int nText1IndexHandled = 0;  

  12. int nText2IndexHandled = 0;  

  13. int nRet = 0;  

  14. for (;;)  

  15. {  

  16. if (nText1IndexHandled==nText1Len
    ||nText2IndexHandled==nText2Len) 
    //don't compare complete since 
    all are same, "ab","abc"  

  17. {  

  18. TCHAR chOffset1 = nText1IndexHandled
    <nText1Len?lpText1[nText1IndexHandled]:0;  

  19. TCHAR chOffset2 = nText2IndexHandled
    <nText2Len?lpText2[nText2IndexHandled]:0;  

  20. nRet = (int)((WORD)chOffset1-
    (WORD)chOffset2);  

  21. break;  

  1. TCHAR ch2 = *(lpText1+nText1IndexHandled);  

  2. TCHAR ch3 = *(lpText2+nText2IndexHandled);  

  3. if (isdigit(ch2)&&isdigit(ch3)) 
    // if digit, change to number and compare  

  4. {  

  5. TCHAR* lpNum1 = new TCHAR[nText1Len];  

  6. TCHAR* lpNum2 = new TCHAR[nText2Len];  

  7. if (NULL==lpNum1||NULL==lpNum2)  

  8. return 0;  

  9. memset(lpNum1,0,nText1Len*sizeof(TCHAR));  

  10. memset(lpNum2,0,nText2Len*sizeof(TCHAR));  

  11. extractnumber(lpText1,nText1Len,
    nText1IndexHandled,lpNum1);  

  12. extractnumber(lpText2,nText2Len,
    nText2IndexHandled,lpNum2);  

  13. nRet = comparenumber(lpNum1,lpNum2);  

  14. delete[] lpNum1;  

  15. delete[] lpNum2;  

  16. }  

  17. else  

  18. {  

  19. nRet = (int)((WORD)ch2-(WORD)ch3);  

  20. nText1IndexHandled++;  

  21. nText2IndexHandled++;  

  22. }  

  23. if (nRet!=0)  

  24. break;  

  25. }  

  26. return nRet;  

  1. TCHAR* extractnumber(TCHAR* lpBuf,int 
    nLen,int& nIndexBegin,TCHAR* lpNumber)  

  2. {  

  3. if (NULL==lpBuf||NULL==lpNumber)  

  4. return lpNumber;  

  5. for (int i=nIndexBegin,nIndex=0;i
    <nLen;++i,++nIndexBegin)  

  6. {  

  7. TCHAR ch = *(lpBuf+i);  

  8. if (!isdigit(ch))  

  9. break;  

  10. lpNumber[nIndex++]=ch;  

  11. }  

  12. return lpNumber;  

  13. }  

  14. int comparenumber(TCHAR* lpNumber1,
    TCHAR* lpNumber2)  

  15. {  

  16. if (NULL==lpNumber1||NULL==lpNumber2)  

  17. return 0;  

  18. int nNum1Len = _tcslen(lpNumber1);  

  19. int nNum2Len = _tcslen(lpNumber2);  

  20. int nMaxLen = max(nNum1Len,nNum2Len);  

  21. TCHAR* lpFormatNum1 = new TCHAR[nMaxLen+1];  

  22. TCHAR* lpFormatNum2 = new TCHAR[nMaxLen+1];  

  23. if (NULL==lpFormatNum1||NULL==lpFormatNum2)  

  24. return 0;  

  25. memset(lpFormatNum1,_T('0'),
    nMaxLen*sizeof(TCHAR));  

  26. memset(lpFormatNum2,_T('0'),
    nMaxLen*sizeof(TCHAR));  

  27. lpFormatNum1[nMaxLen]=0;  

  28. lpFormatNum2[nMaxLen]=0;  

  29. int nPos = 0, nRet = 0;  

  30. int nIndex = nMaxLen-1;  

  31. for (nPos=nNum1Len-1;nPos>=0;--nPos)  

  32. lpFormatNum1[nIndex--]=lpNumber1[nPos];  

  33. nIndex = nMaxLen-1;  

  34. for (nPos=nNum2Len-1;nPos>=0;--nPos)  

  35. lpFormatNum2[nIndex--]=lpNumber2[nPos];  

  36. for (nPos=0;nPos<nMaxLen;++nPos)  

  37. {  

  38. nRet = lpFormatNum1[nPos]-lpFormatNum2[nPos];  

  39. if (nRet!=0)  

  40. break;  

  41. }  

  42. delete[] lpFormatNum1;  

  43. delete[] lpFormatNum2;  

  44. return nRet;  

看完上述内容,你们对VB.NET中怎么实现按文件名排序有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯