地特四等申論題
106年
[資訊處理] 程式設計概要
第 一 題
一、試問以下 C++程式若輸入 believe,則輸出結果各為多少?(25 分)
#include
using namespace std;
char* POP_A(char*d){
char*p=d;
for(;*p;p++) *p=*(p+1);
return d;
}
char* POP_B(char*d){
char*p=d;
while(*p) p++;
*(p-1)=0;
return d;
}
int main(){
char d[1024];
cin>>d;
POP_A(d);
cout< POP_A(d);
cout< POP_B(d);
cout< POP_B(d);
cout< return 0;
}
#include
using namespace std;
char* POP_A(char*d){
char*p=d;
for(;*p;p++) *p=*(p+1);
return d;
}
char* POP_B(char*d){
char*p=d;
while(*p) p++;
*(p-1)=0;
return d;
}
int main(){
char d[1024];
cin>>d;
POP_A(d);
cout<
cout<
cout<
cout<
}
📝 此題為申論題
思路引導 VIP
看到此題,應先解析自訂函式 POP_A 和 POP_B 中指標操作的具體行為,確認兩者分別實作了字串的「去頭」與「去尾」效果。接著帶入初始字串 "believe",逐步寫出每一次函式呼叫後的陣列內容即可得分。
🤖
AI 詳解
AI 專屬家教
【解題思路】先分析 POP_A 與 POP_B 函式的指標操作機制,理解兩者分別實作了「移除字串首字元」與「移除字串尾字元」的功能,再代入輸入字串逐步追蹤變化。
【詳解】
已知:字元陣列 d 接收輸入值,初始內容為字串 "believe"。
▼ 還有更多解析內容
C++指標與字串操作
💡 掌握指標位移與字串結束符號 '\0' 對字串長度的影響機制。
| 比較維度 | POP_A (前移刪除) | VS | POP_B (末端截斷) |
|---|---|---|---|
| 實作方式 | 迴圈逐一覆蓋字元 | — | 修改結尾符號位址 |
| 影響位置 | 刪除字串第一個字元 | — | 刪除字串最後一個字元 |
| 時間複雜度 | O(n) 需搬移全字元 | — | O(n) 需尋找結尾 |
| 關鍵指令 | *p = *(p+1) | — | *(p-1) = 0 |
💬POP_A 透過物理搬移改變內容,POP_B 透過邏輯標記改變長度。