---
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
---