我需要对此函数进行快速提示。所以基本上我有这个结构,由一个类使用。对字符串数组进行排序
#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,但最后一个现在并不重要。
这个!运算符必须按字母顺序对数组进行排序。
下面是我试图做到这一点。
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行检查,如果该数组的每个元素的每个布尔为真,否则将不会执行。然后它开始排序。 这就是我试图做到这一点,但它不起作用。
P.S.解决方案必须使用辅助指针,如下所示: aux=i; i=j; j=aux;
欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在您发布代码并准确描述问题之前,我们无法有效帮助您。 特别是,“不起作用”不是对问题的描述。显示给定的输入和输出。 – Prune
gawd almighty。任何不使用'qsort'或'std :: sort'的理由?您可以将其中任何一个传递给您喜欢的任何数组,并提供比较功能。 (你的比较函数本质上是一行代码。) – enhzflep
我知道你们所有人都认为我应该使用它,事实是,这整个事情都是我昨天的C++考试,这就是为什么我使用!运算符来排序数组,因为它被要求我这样做。现在我必须纠正任何我无法实现的功能。 – user5753059