【问题标题】:Compare the first letter of a string in a struct比较结构中字符串的第一个字母
【发布时间】:2013-06-15 18:31:57
【问题描述】:

所以我有以下问题,我需要比较一个结构中两个字符串的第一个字母,看看一个是否比另一个大。这样做的目的是在冒泡排序算法中实现,以便我可以对结构进行排序。到目前为止,我是通过这条线来的:

if(strcmp(j->name,j->proximo->name)>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();
}

【问题讨论】:

  • if (j->name[0] > j->proximo->name[0]).
  • Thx 但这给了我一个错误代码“main.c:408: 警告:传递 'strcmp' 的参数 1 使指针从整数没有强制转换 main.c:408: 警告:传递参数 2 'strcmp' 从整数中生成指针而不进行强制转换”,我不知道为什么。
  • 我的情况下没有strcmp。我将普通的chars 与> 进行比较。
  • 好点我会试试的
  • main(); 让我毛骨悚然

标签: c string struct strcmp


【解决方案1】:

您的代码正在泄漏内存。

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

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

另外,它已经编写和调试过了。

【讨论】:

    【解决方案2】:

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

    if( j->nome[0][0] > j->proximo->nome[0][0] )
    

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

    但是,请记住以下注意事项:

    • 比较将在 ASCII 级别进行,这意味着大写和小写字符不连续。
    • 您需要插入检查 j->proximo 不为 NULL,否则您的代码会出现段错误。
    • 正如其他人所提到的,对 malloc 的调用似乎没有必要。换句话说,当你做j = j->proximo时,你并没有复制结构的内容,你只是更新了指针。

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2021-04-29
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多