我需要快速提示这个功能。 所以基本上我有这个结构,由一个类使用。
#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();
};
也就是说,每个元素都是一个字符串和一个bool的数组,但最后一个元素现在并不重要。
! operator必须按字母顺序对数组进行排序。
这是我尝试做的方式。
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是否为真,否则不会执行。然后它开始排序。 这就是我尝试做的方式,但它没有用。
P.S。解决方案必须使用辅助指针,如:
aux=i;
i=j;
j=aux;
答案 0 :(得分:1)
快速提示。
operator!()
进行排序。使用名为sort()
的函数。 operator!()
通常会做一个非常不同的事情,使用它进行排序会使您的代码更难理解。using namespace std
(或者在依赖它的类定义之前)。关于为什么在互联网上有很多解释。例如,以下内容省略了构造函数等,但确实占了你所寻求的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::string
,std::vector
(以及C ++库中的其他容器)会跟踪它们的大小,并在需要时干净地调整自己的大小。
阅读std::string
和std::vector
,了解管理它们需要做些什么(设置内容,更新等)。
答案 1 :(得分:0)
您没有将任何内容复制到临时指针。
更改
strcpy(vett[i].nome,temp);
到
strcpy(temp, vett[i].nome);
另外,我要说的是,您使用的方法效率极低,可能会导致问题。我会为你的类定义一个比较函数,并使用std :: sort()。并且,请在下次提供更多信息,输入和输出与预期输出,它有帮助。