2011-05-17 17 views
3

什麼意思在字典,相反數字排序字母字符等以K &ř5-14與選項-nK&R - 數字類型的字母字符?

+0

我的猜測是要對ascii值進行排序,但是如果你只有字母字符(從'a'到'z'和'A'到'Z'),那麼這沒什麼意義,因爲它將相當於他們的字典順序... – Xeo 2011-05-17 20:14:06

+0

什麼是k&r 5-14? – 2011-05-17 20:15:31

+0

@Mohamed,它是由Brian Kernighan和Dennis Ritchie(俗稱K&R)編寫的C編程語言*的第5-14章。這一點已經得到證實,第5-14節是一個練習,指導讀者將'-n'選項應用於第5章所示排序程序中的字段。 – 2011-05-17 20:17:22

回答

0

輸入K & R,部分5.11,比較功能

int numcmp(char *s1, char *s2); /* defined on page 121 */ 

第二版被用於數字排序(相對於使用用於strcmp字典分類)。 numcmp調用函數

double atof(char s[]); /* defined on page 71 */ 

其中將字符串轉換爲它的雙精度等效浮點。

在此示例中,使用-n命令行參數進行排序是由atof函數返回的double值完成的。

+0

練習是5-14 – highlevelcoder 2011-05-17 20:42:44

+0

當然......我相應地編輯了答案。 – mizo 2011-05-17 20:50:43

4

這意味着治療字符串作爲單個數字值,而不是爲一系列恰巧是數字的字符。 K & R向您顯示僅在練習5-14之上使用的numcmp函數。它將char*參數轉換爲double,並將它們進行數字比較,而不是逐個比較字符串。這樣,該字符串103被字符串23後排序因爲103大於23,比較字符串,103會提前進行排序23因爲1字符代碼爲小於2字符代碼。

+0

好的,所以我在評論中並沒有太多太過分...... :) – Xeo 2011-05-17 20:22:12

+0

@Highlevelcoder,如果你使用'numcmp',就像書中一樣,你會得到一致的結果,將非數字字符傳遞給'atof '。如果您想以其他方式處理非數字字符,則必須定義所需的行爲並實施它。 – 2011-05-17 20:41:55

+0

我誤讀了你,thx – highlevelcoder 2011-05-17 20:46:58