关于链表排序函数报错的问题
本帖最后由 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比较汉字的话有点问题,请各位帮忙看看,不胜感激] sunnyrubik 发表于 2019-1-5 21:28
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说 ...
你需要学习一下编码机制宽字符与多字节 百度一下了解一下就好了 这个学习不复杂(不涉及包转换)
你把完整的代码贴上去 人造人大神会给你详细的解决的 毕竟光看理解不好整 本帖最后由 sunnyrubik 于 2019-1-5 17:55 编辑
第二个图贴错了哈
不知道在哪里删,大家无视第二个图哈 有时候不灵? 你得把参数贴上,啥时候不灵的, 这种伪代码没办法测试....因为代码不齐全,没办法在别人电脑上运行,因为程序本身是能运行 所以单看比较费劲吧......。
比较中文的话应该与函数无关(传入的是地址就OK), 宽字符的话用函数lstrcmpW,其实比较的是内存中的ASCII码。 本帖最后由 sunnyrubik 于 2019-1-5 21:47 编辑
理想小青年 发表于 2019-1-5 19:57
有时候不灵? 你得把参数贴上,啥时候不灵的, 这种伪代码没办法测试....因为代码不齐全,没办法在别人电 ...
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说是用Unicode编码的,我也不是很懂有什么区别)。但是奇怪的是大多数还是会满足我想当然以为的拼音比较。有时不灵就是说拼音相同字不同时候,还有一些本来按拼音应该排在前面但是用strcmp排序后却在后面的。
另外,请问lstrcmp和lstrcmpW有什么不同吗?再百度上没找到太多关于lstrcmpW的信息,因为我只是想通过拼音排序(比如"王进喜"和“许三多”,“王进喜”就应该排在前面),但是试了一下lstrcmpW对于那些音同字不同的返回值还是不等于0,请问您有什么解决的方法吗? sunnyrubik 发表于 2019-1-5 21:28
嗯,就是我本来以为strcmp会逐一比较汉字拼音的ASCII嘛,但是网上查了一下好像不是这么一回事儿。(说 ...
把代码贴完整是唯一的解决方法
页:
[1]