Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 比较结构中字符串的第一个字母_C_String_Struct_Strcmp - Fatal编程技术网

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

C 比较结构中字符串的第一个字母,c,string,struct,strcmp,C,String,Struct,Strcmp,所以我有下面的问题,我需要比较一个结构中两个字符串的第一个字母,看一个是否比另一个大。其目的是在bubblesort算法中实现,以便我可以对结构进行排序。到目前为止,我是这样说的: 如果(strcmp(j->name,j->proximo->name)>0) 但是这一行比较了字符串中的所有内容,我只需要两者的第一个字母 完整代码如下 struct s_Especialidade{ int id; char nome[60]; char descricao[60];

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

如果(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();
}

你的代码正在泄漏内存

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

也可以考虑从标准库中使用排序方法,一旦编写了正确的比较函数,它就完全可以对任何数组进行排序,而且它可能比算法快。


此外,它已经编写和调试。

鉴于您当前的代码结构,您需要将比较更改为以下内容:

if( j->nome[0][0] > j->proximo->nome[0][0] )
此代码段将比较两个字符串的第一个字符(记住C从0开始计数)的ASCII值

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

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

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