2010-04-01 103 views
0

我有一个程序,根据它们存储在其中的“名称”将结构放置在链接列表中。按字母顺序排列[C]

要找到他们在列表中的位置,我需要弄清楚im插入的名称是在字母表中的早些还是晚一些,然后是在它旁边的结构中。

名称在结构中,我可以访问。 我不需要一个完整的comaparison,如果这是更多的工作,即使只是第一个字母是好的。

感谢您的帮助!

回答

1

这不是我清楚你的问题是什么,但像这样的工作:

if (node1->name[0] <= node2->name[0]) { 
    ... 
} else { 
    ... 
} 

这将比较名称的第一个字母在每个节点中。

1

如果你有两个C字符串,ab,你可以简单地比较它们的第一要素:

*a == *b 

哪里==可以是任何六个关系运算符的。

请记住,对于C字符串,char*指向字符串中的第一个字符。

+0

不要忘记检查NULL – Andrey 2010-04-01 23:46:12

1

strcmp()比较两个C字符串,并会告诉你它们在什么顺序,或者它们是否相同。如果你不关心案件,你可以使用strcasecmp()。这些函数不会比确定返回顺序所需的更多字符串。

+0

但请注意,strcasecmp不是标准C. – Arkku 2010-04-01 23:53:37

1

您可以简单地循环访问列表,然后根据您在传递每个元素时进行的比较在正确的位置插入新元素。最简单的区分大小写的版本可以通过比较字母的数字值(例如a[0] < b[0])来完成,或者如果您希望区分大小写(请参阅ctype.h),则可以将它们都转换为常见格式。或者你可以将整个单词与strcmp进行比较。