鱼C论坛

 找回密码
 立即注册
查看: 3230|回复: 5

[已解决]关于链表排序函数报错的问题

[复制链接]
发表于 2019-1-5 17:23:00 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 sunnyrubik 于 2019-1-5 18:01 编辑
  1. //按照名字拼音对链表进行排序
  2. void SortList()
  3. {
  4.         int i,j;
  5.         int nCount = 0;
  6.         STUNODE *Temp = Head;//STUNODE是之前定义的一个链表节点
  7.         //获取总共多少个节点
  8.         while(Temp != NULL)
  9.         {
  10.                 nCount++;
  11.                 Temp = Temp->Next;
  12.         }
  13.         //再次遍历赋值
  14.         Temp = Head;
  15.         STUNODE info[nCount];
  16.         STUNODE temp;
  17.         for(i = 0;i < nCount;i++)
  18.         {
  19.                 strcpy(info[i].arrStuNum,Temp->arrStuNum);
  20.                 strcpy(info[i].arrStuName,Temp->arrStuName);
  21.                 info[i].iStuScore  = Temp->iStuScore;
  22.                 Temp = Temp->Next;
  23.         }
  24.         FreeList();//这是一个清空链表的函数
  25.         for(i = 1; i<nCount ; i++)
  26.         {
  27.                 for(j = 0;j < nCount-i;j++)
  28.                 {
  29.                         if(strcmp(info[j].arrStuName,info[j+1].arrStuName) > 0)
  30.                         {
  31.                                 temp = info[j];
  32.                                 info[j] = info[j+1];
  33.                                 info[j+1] = temp;
  34.                         }
  35.                 }
  36.         }
  37.         for(i = 0; i< nCount;i++)
  38.         {
  39.                 AddStuToTail(info[i].arrStuNum,info[i].arrStuName,info[i].iStuScore);//尾添加函数
  40.         }
  41. }
复制代码


这个函数不知道为什么有的时候灵有的时候不灵,好像strcmp比较汉字的话有点问题,请各位帮忙看看,不胜感激]
最佳答案
2019-1-5 17:23:01
sunnyrubik 发表于 2019-1-5 21:28
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说 ...

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

最佳答案

查看完整内容

你需要学习一下编码机制 宽字符与多字节 百度一下了解一下就好了 这个学习不复杂(不涉及包转换) 你把完整的代码贴上去 人造人大神会给你详细的解决的 毕竟光看理解不好整
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-5 17:23:01 | 显示全部楼层    本楼为最佳答案   
sunnyrubik 发表于 2019-1-5 21:28
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说 ...

你需要学习一下编码机制  宽字符与多字节 百度一下了解一下就好了 这个学习不复杂(不涉及包转换)
你把完整的代码贴上去 人造人大神会给你详细的解决的 毕竟光看理解不好整
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-5 17:35:51 | 显示全部楼层
本帖最后由 sunnyrubik 于 2019-1-5 17:55 编辑

第二个图贴错了哈
不知道在哪里删,大家无视第二个图哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-5 19:57:47 | 显示全部楼层
有时候不灵? 你得把参数贴上,啥时候不灵的, 这种伪代码没办法测试....  因为代码不齐全,没办法在别人电脑上运行,因为程序本身是能运行 所以单看比较费劲吧......。
比较中文的话应该与函数无关(传入的是地址就OK), 宽字符的话用函数lstrcmpW,其实比较的是内存中的ASCII码。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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,请问您有什么解决的方法吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

把代码贴完整是唯一的解决方法
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 11:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表