--- tags: Computer Programming II image: https://i.imgur.com/Ngut6cI.png --- :::info 大家可以來幫忙整理 QA!(要登入才能編輯哦) 如果該問題已寄信但尚未回覆,請打上「助教xxx: :mailbox_with_mail:」 ::: # 程設二 作業 1 QA 整理 [TOC] 作業連結:[hw01](https://drive.google.com/file/d/1u8ljIu-4xUGDnuYYFHJXEU66Qy8w6jrT/view) ## 1 Another Character Encoding Q: 測資字串長度最大值? A: $10^7$ Q: 使用者輸入錯誤要讓他重新輸入嗎? A: 不用 Q: 執行完畢後,要讓使用者開啟下一輪的輸入,還是直接結束程式? A: 直接結束程式 Q: 如果輸入`8200 4200`,要把空白當字符處理判錯,還是輸出 A? A: 輸出 A (更正: 助教說不會出這種情形,但 `82004200` 的情形還是輸出 A) Q: 可以一個一個輸出,直到不可印字元出現才跳錯嗎?還是要全部判斷完再輸出? A: 全部判斷完再輸出 Q: 若輸入字串為 `820042` ,需輸出 A 或此為不合法輸入? A: 不會有結尾不是00的字串 Q: 是否會出現字串長度為奇數的測資? A: 會,算是非法輸入 ## 2 Replacement Q: 4096 跟 64 指的是合法的最大字串長度,還是測資的最大字串長度? A: 測資的最大字串長度 Q: 空字串算非法輸入嗎? A: 算合法輸入 Q: 執行完畢後,要讓使用者開啟下一輪的輸入,還是直接結束程式? A: 直接結束程式 Q: 假設把 `be` 替換成 `eat`,輸入 `bee`,要改成 `eate` 嗎? A: 要 Q: 如果使用者要將 `aba` 替換成 `abc`,程式需將 `ababa` 替換成 `abcba` 或 `ababc` 或其他? A: 由開頭往後找先找到先 patch ## 3 My String Library v1 Q: manual 的 return 值是 long (=long int),但是實測strtol,回傳的最大值最小值範圍是 long long? A: 電腦的long int的定義會根據實際使用的作業系統有所區別,我們程式設計採用的ubuntu20.04在long的處理上是視為8 bytes整數的, 所以範圍確實會是那麼大沒錯 Q:助教會檢查 errno 嗎? A:不會 ## 4 My String Library v2 Q: 不在實作列表中的字串處理函數可以用嗎?像 strlen? A: 不在實作列表的 func 都可以用 ## 5 Split Q:助教在 hw0105.c 中會 `include "mysplit.h"` 抑或 `include "mystring.h"`? A: 第五題沒有跟第四題一樣是老師打錯(亦即會 `include "mysplit.h"`) Q:如果輸入的字串指標指向空字串,這樣算非法輸入嗎?這時要給pppList空指標嗎? A:空字串算合法輸入,pppList要返還一個字串陣列,內容只有一個空字串 Q:如果輸入的字串指標或分割符指標兩者有一個以上為NULL,這樣算非法輸入嗎? A:算(更正:助教說分隔符輸入NULL合法且預設是空白、tab、\n) Q:如果輸入的分割符字串中有重複的分割符出現,算非法輸入嗎? A:pSeparator 不是 delim,要碰到完整的字串才要 split,像是 pSeparator = "aa" 那 "bab" 會回傳 ["bab"],"baab" 才會回傳 ["b", "b"],建議可以去載個 python 來跑跑看,基本就是依照他的行為判斷。 <!-- 不用載 Python,瀏覽器右鍵開發者工具 Console 中用 JavaScript 也有 Split: "baab".split("aa") --> Q:不合法輸入要把ppList設成NULL嗎? A:要 Q:不合法輸入的pCounter要設甚麼? A:不用定義 Q: 字串最大長度? A: $10^6$ 錯誤輸入統整: 1. pppList pCounter pStr 任一為 NULL 或 pSeprater 為空字串,皆須回傳 -1 2. 在錯誤輸入情況下 (回傳 -1),若 pppList 不為 NULL,*pppList 需改為 NULL 3. 在錯誤輸入情況下 (回傳 -1),pCounter 不需任何更動 4. \*pStr為空字串時,屬合法輸入,pppList 須回傳一個空陣列至 *ppList 5. pSeprator 為 NULL 時,屬合法輸入,以特殊規則進行分割 Common warning testcase: ``` pStr = "1,,2,,3,,4,,5" pSeprater = "," --- output: "1", "", "2", "", "3", "", "4", "", "5" ``` ``` pStr = "12\n \t 234 45" pSeprater = NULL --- output:"12", "234", "45" ``` ## 6 Bonus: perror ---