所以我有以下问题我需要比较一个结构中两个字符串的第一个字母,看看一个是否大于另一个。这样做的目的是在bubblesort算法中实现,以便我可以对结构进行排序。到目前为止,我来到这条线:
如果(的strcmp(J->名称,J => proximo->名称)大于0)
但是这一行比较了字符串中的所有内容,我只需要两个字母的第一个字母。
完整代码如下:
struct s_Especialidade{
int id;
char nome[60];
char descricao[60];
struct s_Especialidade *proximo;
};
void ordenarMedicoN(){
PESPECIALIDADE i = malloc ( sizeof(Especialidade));
PESPECIALIDADE j = malloc ( sizeof(Especialidade));
PESPECIALIDADE t = malloc ( sizeof(Especialidade));
for(i=cabecaEspecialidade; i->proximo != NULL; i=i->proximo) {
for(j=cabecaEspecialidade; j->proximo != NULL; j=j->proximo) {
if(strcmp(j->nome[0],j->proximo->nome[0])>0) {
t = j;
j = j->proximo;
j->proximo = t;
}
}
}
main();
}
答案 0 :(得分:1)
您的代码正在泄漏内存。
首先执行malloc()
永远是正确的,然后将一些其他地址分配给同一指针,该指针将丢失对malloc()
分配的内存的引用。
另外,考虑只使用标准库中的qsort()
来进行排序,一旦你编写了正确的比较函数,它就完全能够对任何数组进行排序,并且它可能比你的算法更快。
此外,它已经编写和调试。
答案 1 :(得分:0)
鉴于您当前的代码结构,您需要将比较更改为以下内容:
if( j->nome[0][0] > j->proximo->nome[0][0] )
此代码段将比较两个字符串的第一个字符的ASCII值(记住C从0开始计数)。
但是,请记住以下警告:
j->proximo
不为NULL的检查,否则您的代码将出现段错误。j = j->proximo
时,你不复制结构的内容,只需更新指针。