gpt4 book ai didi

c++ - 对字符串数组进行排序

转载 作者:行者123 更新时间:2023-11-30 05:33:31 28 4
gpt4 key购买 nike

我需要有关此功能的快速提示。所以基本上我有这个结构,由一个类使用。

#include <cstring>
#include <iostream>
using namespace std;

struct postazione{
char* nome;
bool occupato;
};

class Aula{
int qntpst;
postazione * vett;
bool full(const Aula&);
public:
Aula(int);
bool aggiungi(const char*);
friend ostream& operator<<(ostream&, const Aula&);
Aula& elimina(int);
Aula(const Aula&);
Aula& operator!();
~Aula();
};

也就是一个数组,每个元素都是一个string和一个bool,现在最后一个已经不重要了。

!运算符必须按字母顺序对数组进行排序。

我是这样尝试的。

Aula& Aula::operator!(){
int qnt=0;
for(int i=0;i<qntpst;i++)
if(vett[i].occupato)
qnt++;
if(qnt!=qntpst)
return *this;
char *temp;
for(int i=0;i<qntpst-1;i++){
for(int j=i+1;j<qntpst;j++){
if(strcmp(vett[i].nome,vett[j].nome)>0){
temp=new char[strlen(vett[i].nome)+1];
strcpy(vett[i].nome,temp);
delete [] vett[i].nome;
vett[i].nome=new char[strlen(vett[j].nome)+1];
strcpy(vett[i].nome,vett[j].nome);
delete [] vett[j].nome;
vett[j].nome=new char[strlen(temp)+1];
strcpy(vett[j].nome,temp);
delete temp;
}
}
}
return *this;
}

前7行检查数组每个元素的每个bool是否为真,否则不执行。然后开始排序。这就是我尝试这样做的方式,但它不起作用。

附言解决方案必须使用辅助指针,例如: 辅助=我;
我=j;
j=aux;

最佳答案

快速提示。

  1. 不要使用operator!() 进行排序。使用名为 sort() 的函数。 operator!() 通常会做一些非常不同的事情,使用它进行排序会使您的代码更难理解。
  2. 不要在头文件中(或在依赖它的类定义之前)使用using namespace std。互联网上有很多关于原因的解释。
  3. 使用标准的 C++ 库功能,而不是自己动手做。

例如,以下省略了构造函数等,但完成了您要查找的 90%。无需担心内存管理、让算法正确排序等等。

#include <string>
#include <vector>
#include <algorithm>

struct postazione
{
std::string nome;
bool occupato;
bool operator<(const postazione & other) const
{
return nome < other.nome; // std::string supports this
};
};


class Aula
{
std::vector<postazione> data;
public:
// constructors, destructors, etc

void sort() // sort the current vector
{
std::sort(data.begin(), data.end()); // this sorts using the order defined by postazione::operator<()
}

Aula Sorted() const // return a sorted copy of ourselves
{
Aula temp(*this); // copy ourself
temp.sort(); // sort the copy
return temp; // return sorted copy
};
};

需要注意的是,std::stringstd::vector(以及 C++ 库中的其他容器)会跟踪它们的大小,并自行调整大小需要时干净利落。

阅读 std::stringstd::vector 以了解您需要做什么来管理它们(设置内容、更新等)。

关于c++ - 对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756562/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com