基礎知識 | 每日一練(120)

  • 2019 年 10 月 5 日
  • 筆記

基礎知識練習
士人有百折不回之真心,才有萬變不窮之妙用。立業建功,事事要從實地著腳,若少慕聲聞,便成偽果;講道修德,念念要從虛處立基,若稍計功效,便落塵情。 ——菜根譚
讀者:為什麼有些版本的 toupper() 對大寫字元會有奇怪的反應?為什

么有的程式碼在調用 toupper() 前先調用 tolower()?

小林:老版的 toupper() 和 tolower() 不一定能夠正常處理不需要轉換的字元參數,例如數字、標點或已經符合請求的字元。在 ANSI/ISO 標準 C 中, 這些函數保證對所有的字元參數正常處理。

讀者:怎樣把字元串分隔成用空白作間隔符的段?怎樣實現類似傳遞給main() 的 argc 和 argv?

小林:標準中唯一用於這種分隔的函數是 strtok(), 雖然用起來需要些技巧, 而且不一定能做到你所要求的所有事。

讀者:我需要一些處理正則表達式或通配符匹配的程式碼。

小林:確保你知道經典的正則表達式和文件名通配符的不同。有許多匹配正則表達式的包可以利用。很多包都是用成對的函數, 一個 「編譯」 正則表達式, 另一個 「執行」 它, 即用它比較字元串。查查頭文件 <regex.h> 或<regexp.h> 和函數 regcmp/regex, regcomp/regexec, 或 re comp/re exec。這些函數可能在一個單獨的 regexp 庫中。