2010-04-01 83 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進行比較。