首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较结构中字符串的第一个字母

比较结构中字符串的第一个字母
EN

Stack Overflow用户
提问于 2013-06-15 18:31:57
回答 2查看 1.2K关注 0票数 0

因此,我有以下的问题,我需要比较两个字符串的第一个字母从一个结构,看看一个是大的,然后另一个。其目的是在bubblesort算法中实现,这样我就可以对结构进行排序。到目前为止,我是按这条线来的:

如果(strcmp(j->name,j->proximo->name)>0)

但是这一行比较了字符串中的所有内容,我只需要这两个字符串的第一个字母。

完整的代码如下

代码语言:javascript
复制
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();
}
EN

回答 2

Stack Overflow用户

发布于 2013-06-15 19:40:47

您的代码正在泄漏内存。

首先执行malloc(),然后将其他地址分配给同一个指针,这将失去对malloc()分配的内存的引用,这是不对的。

另外,考虑使用标准库中的qsort()进行排序,一旦编写了适当的比较函数,它就完全能够对任何数组进行排序,而且可能比算法更快。

而且,它已经编写和调试过了。

票数 1
EN

Stack Overflow用户

发布于 2013-06-15 20:05:10

考虑到当前的代码结构,您需要将比较更改为如下所示:

代码语言:javascript
复制
if( j->nome[0][0] > j->proximo->nome[0][0] )

这个代码片段将比较两个字符串的第一个字符(记住C从0开始计数)的ASCII值。

但是,请记住以下几点:

  • 比较将在ASCII级别进行,这意味着大写字符和小写字符不是连续的.
  • 您需要插入一个j->proximo不为NULL的检查,否则您的代码将出现分段错误。
  • 正如其他人所提到的,对malloc的调用似乎没有必要。换句话说,在执行j = j->proximo时,不复制结构的内容,只需更新指针。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17126720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档