按特定值升序对字符串进行排序.我的实施中出了什么问题?

Sorting strings in ascending order by a certain value. What is wrong in my implementation?

本文关键字:施中出 我的 什么 问题 排序 升序 字符串      更新时间:2023-10-16

我有以下问题:

给定一个数字 N 和 N 名称,使用某个值(按升序)对名称进行排序。具有相同值的名称按字母顺序排序。

每个名称的值由元音或辅音对的数量决定。因此,每对元音将单词的值加 1,每对辅音从值中减去 1,元音-辅音或辅音-元音对不会改变单词的值。

做了什么:我使用结构创建了一个向量。每个元素都有名称及其值。我计算了每个名称的值,并将其提供给 .value 字段。之后,我使用 2 for 循环对我的向量进行排序(我对值排序和字母排序没有有效的想法),并显示向量。

发生什么情况:我没有得到结果,我也认为可能存在分段错误。在发现此类错误时,我仍然是新手。

你能给我一些指示吗?

谢谢。

附上下面的代码。

#include <vector>
#include <string>
#include <cstring>
using namespace std;
const char voc[] = "aeiouAEIOU";
struct stud
{
string name;
int value;
};
typedef vector<stud> vect;
void data(int& n, vect& v)
{
cin>>n;
for(int i = 0; i < n; ++i)
{
cin>>v[i].name;
}
}
int getValue(string name)
{
int value = 0;
int len = name.length();
for(int i = 0; i < len; ++i)
{
if(strchr(voc, name[i]) && strchr(voc, name[i+1]))
value++;
else if(!strchr(voc, name[i]) && !strchr(voc, name[i+1]))
value--;
}
return value;
}
void updateValues(vect& v)
{
vector<stud>::size_type v_size = v.size();
for(unsigned i = 0; i < v_size; ++i)
{
int value = getValue(v[i].name);
v[i].value = value;
}
}
void sortByValue(vect& v)
{
vector<stud>::size_type v_size = v.size();
for(unsigned i = 0; i < v_size; ++i)
for(unsigned j = i+1; j < v_size; ++j)
{
if(v[i].value > v[j].value)
swap(v[i], v[j]);
else if(v[i].value == v[j].value)
if(v[i].name.compare(v[j].name) > 0)
swap(v[i], v[j]);
}
}
void display(vect v)
{
vector<stud>::size_type sz = v.size();
for(unsigned i = 0; i < sz; ++i)
cout<<v[i].name<<'n';
}
int main()
{
int n;
vect myvec;
data(n, myvec);
updateValues(myvec);
sortByValue(myvec);
display(myvec);
return 0;
}

最好使用重载运算符>请在此处观看 或使用 std::sort

std::vector<stud> vec;
//read
std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) -> bool
{ 
if (a.value == b.value)
return a.name > b.name;
else
return a.value > b.value
});