我有一個程序,根據它們存儲在其中的「名稱」將結構放置在鏈接列表中。按字母順序排列[C]
要找到他們在列表中的位置,我需要弄清楚im插入的名稱是在字母表中的早些還是晚一些,然後是在它旁邊的結構中。
名稱在結構中,我可以訪問。 我不需要一個完整的comaparison,如果這是更多的工作,即使只是第一個字母是好的。
感謝您的幫助!
我有一個程序,根據它們存儲在其中的「名稱」將結構放置在鏈接列表中。按字母順序排列[C]
要找到他們在列表中的位置,我需要弄清楚im插入的名稱是在字母表中的早些還是晚一些,然後是在它旁邊的結構中。
名稱在結構中,我可以訪問。 我不需要一個完整的comaparison,如果這是更多的工作,即使只是第一個字母是好的。
感謝您的幫助!
這不是我清楚你的問題是什麼,但像這樣的工作:
if (node1->name[0] <= node2->name[0]) {
...
} else {
...
}
這將比較名稱的第一個字母在每個節點中。
如果你有兩個C字符串,a
和b
,你可以簡單地比較它們的第一要素:
*a == *b
哪裏==
可以是任何六個關係運算符的。
請記住,對於C字符串,char*
指向字符串中的第一個字符。
strcmp()
比較兩個C字符串,並會告訴你它們在什麼順序,或者它們是否相同。如果你不關心案件,你可以使用strcasecmp()
。這些函數不會比確定返回順序所需的更多字符串。
但請注意,strcasecmp不是標準C. – Arkku 2010-04-01 23:53:37
您可以簡單地循環訪問列表,然後根據您在傳遞每個元素時進行的比較在正確的位置插入新元素。最簡單的區分大小寫的版本可以通過比較字母的數字值(例如a[0] < b[0]
)來完成,或者如果您希望區分大小寫(請參閱ctype.h
),則可以將它們都轉換爲常見格式。或者你可以將整個單詞與strcmp
進行比較。
不要忘記檢查NULL – Andrey 2010-04-01 23:46:12