在结尾按编号对文件名列表进行排序

时间:2014-12-29 18:36:05

标签: c++

我有一个文件列表:

foo10.tif
foo2.tif
...
foo102.tif

我想根据文件名末尾的数字对它们进行排序。

最好使用c ++ 11和lambdas。

1 个答案:

答案 0 :(得分:0)

这是有效的。如果您对此有任何疑问,请与我联系:

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
   vector<string> aFiles =
   {
      "foo10.tif",
      "foo2.tif",
      "foo102.tif",
   };

   sort(begin(aFiles), end(aFiles), [](const string& a, const string& b)
   {
      auto RemoveExtension = [](const string& s) -> string
      {
         string::size_type pos = s.find_last_of('.');
         if (pos != string::npos)
            return s.substr(0, pos);
         return s;
      };

      string partA = RemoveExtension(a), partB = RemoveExtension(b);
      if (partA.length() != partB.length())
         return partA.length() < partB.length();

      return partA < partB;
   } );

   for (string s : aFiles)
      cout << s << endl;
}