sunnyrubik 发表于 2019-1-5 17:23:00

关于链表排序函数报错的问题

本帖最后由 sunnyrubik 于 2019-1-5 18:01 编辑

//按照名字拼音对链表进行排序
void SortList()
{
        int i,j;
        int nCount = 0;
        STUNODE *Temp = Head;//STUNODE是之前定义的一个链表节点
        //获取总共多少个节点
        while(Temp != NULL)
        {
                nCount++;
                Temp = Temp->Next;
        }
        //再次遍历赋值
        Temp = Head;
        STUNODE info;
        STUNODE temp;
        for(i = 0;i < nCount;i++)
        {
                strcpy(info.arrStuNum,Temp->arrStuNum);
                strcpy(info.arrStuName,Temp->arrStuName);
                info.iStuScore= Temp->iStuScore;
                Temp = Temp->Next;
        }
        FreeList();//这是一个清空链表的函数
        for(i = 1; i<nCount ; i++)
        {
                for(j = 0;j < nCount-i;j++)
                {
                        if(strcmp(info.arrStuName,info.arrStuName) > 0)
                        {
                                temp = info;
                                info = info;
                                info = temp;
                        }
                }
        }
        for(i = 0; i< nCount;i++)
        {
                AddStuToTail(info.arrStuNum,info.arrStuName,info.iStuScore);//尾添加函数
        }
}

这个函数不知道为什么有的时候灵有的时候不灵,好像strcmp比较汉字的话有点问题,请各位帮忙看看,不胜感激]

理想小青年 发表于 2019-1-5 17:23:01

sunnyrubik 发表于 2019-1-5 21:28
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说 ...

你需要学习一下编码机制宽字符与多字节 百度一下了解一下就好了 这个学习不复杂(不涉及包转换)
你把完整的代码贴上去 人造人大神会给你详细的解决的 毕竟光看理解不好整

sunnyrubik 发表于 2019-1-5 17:35:51

本帖最后由 sunnyrubik 于 2019-1-5 17:55 编辑

第二个图贴错了哈
不知道在哪里删,大家无视第二个图哈

理想小青年 发表于 2019-1-5 19:57:47

有时候不灵? 你得把参数贴上,啥时候不灵的, 这种伪代码没办法测试....因为代码不齐全,没办法在别人电脑上运行,因为程序本身是能运行 所以单看比较费劲吧......。
比较中文的话应该与函数无关(传入的是地址就OK), 宽字符的话用函数lstrcmpW,其实比较的是内存中的ASCII码。

sunnyrubik 发表于 2019-1-5 21:28:23

本帖最后由 sunnyrubik 于 2019-1-5 21:47 编辑

理想小青年 发表于 2019-1-5 19:57
有时候不灵? 你得把参数贴上,啥时候不灵的, 这种伪代码没办法测试....因为代码不齐全,没办法在别人电 ...

嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说是用Unicode编码的,我也不是很懂有什么区别)。但是奇怪的是大多数还是会满足我想当然以为的拼音比较。有时不灵就是说拼音相同字不同时候,还有一些本来按拼音应该排在前面但是用strcmp排序后却在后面的。
另外,请问lstrcmp和lstrcmpW有什么不同吗?再百度上没找到太多关于lstrcmpW的信息,因为我只是想通过拼音排序(比如"王进喜"和“许三多”,“王进喜”就应该排在前面),但是试了一下lstrcmpW对于那些音同字不同的返回值还是不等于0,请问您有什么解决的方法吗?

人造人 发表于 2019-1-6 01:19:06

sunnyrubik 发表于 2019-1-5 21:28
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说 ...

把代码贴完整是唯一的解决方法
页: [1]
查看完整版本: 关于链表排序函数报错的问题