按特定值升序对字符串进行排序.我的实施中出了什么问题?
Sorting strings in ascending order by a certain value. What is wrong in my implementation?
我有以下问题:
给定一个数字 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
});
相关文章:
- 无法找出我的代码中的内存泄漏
- 为什么弹出我的堆栈会返回垃圾而不是初始变量?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 如何让我的重载<<运算符打印出我的函数?
- 我无法找出我的代码出了什么问题
- 无法在 cuda 内核中使用我的模板类
- 如何在没有现有引擎的情况下在游戏中设计我的事件触发器框架?
- 为什么在 Direct X 11 中没有我的程序输出?
- 在C++中,我的主机游戏角色在游戏场数组内移动时不会停止
- 无法在代码厨师七月挑战中找到我的逻辑错误
- 我想在终端窗口中运行我的 CLion 程序
- 如何在QT中的QtableView中找到我的按钮的行号
- Qt - 为什么我无法在主窗口中为我的自定义按钮触发 mousePressEvent
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 我不知道如何创建一个以数字/字母顺序打印出我的整数或字符串的程序
- 如何在Input_Data函数中纠正我的嵌套以进行循环
- 在Visual Studio 2012中运行我的OpenCV代码时无法找出'u202A'警告
- 为什么编译器不能从函数参数中推断出我的模板值?
- 无法找出我的代码中出了什么问题