免費開始練習
地特四等申論題 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;
}
📝 此題為申論題

思路引導 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 透過邏輯標記改變長度。
🧠 記憶技巧:A刪前(位移搬移)、B刪後(結尾歸零),指標運算定生死。
⚠️ 常見陷阱:最容易出錯在 POP_B 的指標位置,誤以為 p 停在最後一個字元,實際上 *p 為空值時指標已指向字串結束符號。
指標遞增與遞減運算 C-style 字串處理函式 (string.h) 陣列與指標的等價性

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

C/C++ 程式語言基礎與執行邏輯
查看更多「[資訊處理] 程式設計概要」的主題分類考古題