C++中中间名排序字符串?

C++中中间名排序字符串?,c++,string,sorting,C++,String,Sorting,我在目录和数组中都有文件名。文件名如下:F1S01.C01、F1S03.C02、F1S02.C02等等 文件未在此数组中排序,我想根据以下示例对其进行排序: F1S01.C01 F1S02.C01 F1S03.C01 以及: 以及: 所以,我总是需要3个正好3个结尾相同的文件,例如,C01,但增加S01、S02和S03或S04、S05和S06。有没有办法根据我的示例对文件进行排序?我已经编写了这段代码 #include <iostream> #include <string&

我在目录和数组中都有文件名。文件名如下:F1S01.C01、F1S03.C02、F1S02.C02等等

文件未在此数组中排序,我想根据以下示例对其进行排序:

F1S01.C01
F1S02.C01
F1S03.C01
以及:

以及:


所以,我总是需要3个正好3个结尾相同的文件,例如,C01,但增加S01、S02和S03或S04、S05和S06。有没有办法根据我的示例对文件进行排序?

我已经编写了这段代码

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

bool WayToSort(string i, string j) { return i < j; };

int main()
{
vector<string>  pich = {"F1S01.C01", "F1S03.C02", "F1S02.C02", "F1S01.C02", "F1S03.C03", "F1S02.C03", "F1S01.C03", "F1S03.C01", "F1S02.C01"};
sort(pich.begin(),pich.end(),WayToSort);

  for (string &s : pich) cout << s << endl;
  return 0;
}

但您想要的结果正好相反,只需更改WayToSort函数,可能您可以使用.operator来分隔两个部分。

是的,有一种方法,但您应该付出一些努力。标题也表示C,而标签则表示C++。如果这是程序中唯一需要的东西,那么这两个工具都不是好工具。最好还是使用一些脚本语言。那么,怎么办?@Darius请展示数组定义。不清楚它是二维字符数组还是std::string等类型的对象数组。它只是一个包含字符串的数组,而不是二维数组。您所有的示例都按正常字母顺序排序,因此您可以调用std::sortstd::beginarray,std::endarray;就这样吧。否则,请提供反映您的订单的比较功能。谢谢您的回答!这不是我真正需要的,我需要.C01在一起。因此,输出应该是这样的:F1S01.C01 F1S02.C01 F1S03.C01 F1S01.C02 F1S02.C02 F1S03.C02等等。。对不起,我没有读完你的文章,我会试试看@大流士,我可以给你一个想法,也许是创造结构。在两部分之间。
F1S04.C01
F1S05.C01
F1S06.C01
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

bool WayToSort(string i, string j) { return i < j; };

int main()
{
vector<string>  pich = {"F1S01.C01", "F1S03.C02", "F1S02.C02", "F1S01.C02", "F1S03.C03", "F1S02.C03", "F1S01.C03", "F1S03.C01", "F1S02.C01"};
sort(pich.begin(),pich.end(),WayToSort);

  for (string &s : pich) cout << s << endl;
  return 0;
}
F1S01.C01
F1S01.C02
F1S01.C03
F1S02.C01
F1S02.C02
F1S02.C03
F1S03.C01
F1S03.C02
F1S03.C03