因此,我必须主要根据大小对字符串数组进行排序,这样可以正常工作。 然后,我尝试以类似的方式按字母顺序对相同大小的内容进行排序,并简单地将其显示为完全混乱。
代码部分:
#include <iostream>
#include <string>
using namespace std;
struct strs{
string str;
int sz; //stores size of the string
};
bool compare(string a, string b, int s){ //comparing by characters
for(int i = 0; i < s; i++){
if(a[i] > b[i]) return true;
}
return false;
}
int main(){
int n, chk;
bool ctr;
cin>>n;
strs tab[n];
for(int i = 0; i < n; i++){
cin>>tab[i].str;
tab[i].sz = tab[i].str.size();
}
//Comparing lengths
for(int i = 0; i < n; i++){
chk = i;
for(int j = i + 1; j < n; j++){
if(tab[chk].sz > tab[j].sz){
chk = j;
}
}
if(chk != i){
swap(tab[i].str, tab[chk].str);
swap(tab[i].sz, tab[chk].sz);
}
}
//Comparing characters
for(int i = 0; i < n; i++){
chk = i;
for(int j = i + 1; j < n; j++){
if(tab[chk].sz == tab[j].sz){
ctr = compare(tab[chk].str, tab[j].str, tab[chk].sz);
if(ctr) chk = j;
}
if(tab[i].sz < tab[j].sz) break;
}
if(chk != i){
swap(tab[i].str, tab[chk].str);
swap(tab[i].sz, tab[chk].sz);
}
}
//output
for(int i = 0; i < n; i++){
cout<<tab[i].str<<endl;
}
return 0;
}
并显示“输入”(从控制台复制)的含义:
输出看起来像这样:
所以它几乎没有排序的余地,我也不知道如何尝试使它起作用。
答案 0 :(得分:0)
您比较的功能应类似于:
bool compare(const std::string& a, const std::string& b, int s){ //comparing by characters
for(int i = 0; i < s; i++){
if(a[i] != b[i]) return a[i] > b[i];
}
return false;
}
但更简单的是使用std::sort
:
auto proj = [](const std::string& s){ return std::make_tuple(s.size(), std::ref(s)); }
auto compare = [](const std::string& lhs, const std::string& rhs)
{
return proj(lhs) < proj(rhs);
};
std::sort(strings.begin(), strings.end(), compare);