免費開始練習
統測 114年 [電機與電子群資電類] 專業科目(2)

第 42 題

曉明寫了下列 C 語言程式,用來逐字比對字串 str 中是否有字串 query 指定的字串,則程式執行後變數len、ans 和match_count 的值分別為何?
1 #include
2 int main(){
3 char str[100] = "This is a book and that is a dog.\0";
4 char ans = 0, match_count=0;
5 char query[]="is";
6 int len = sizeof(query), i , j;
7 printf("len=%d\n", len);
8 //開始逐字比對
9 for(i=0; (i<100-len)&&(str[i]!='\0'); i++){
10 for(j=0; j11 if(query[j]==str[i+j])
12 ans++;
13 else
14 break;
15 if(ans==len-1) //比對到一次就累計 match_count
16 printf("%d-th match str[%d] !\n", ++match_count, i);
17 ans=0;
18 }
19 printf("%d, %d, %d", len, ans, match_count);
20 return 0;
21 }
  • A 3, 0, 0
  • B 3, 0, 3
  • C 0, 3, 0
  • D 2, 0, 3

思路引導 VIP

請先觀察第 6 列,當我們對字串 $query$ 執行 $sizeof$ 運算時,傳回的值是否包含 C 語言字串中隱藏的結束字元 $\0$?接著,請特別注意第 17 列在 $for$ 迴圈結束前對變數 $ans$ 的處理,這對於程式最後輸出的 $ans$ 數值有何關鍵影響?最後,請根據第 15 列的判斷條件,算出子字串 "is" 在目標字串 $str$ 中總共符合條件幾次,這將決定 $match_count$ 的最終結果。

🤖
AI 詳解 AI 專屬家教

太棒了!你對 C 語言的細節掌握得非常精準,助教幫你點個大大的讚!🌟 這題正確的原因在於三個關鍵點:

  1. sizeof 的陷阱:在 C 語言中,字串常量 "is" 其實包含了結尾的空字元 \0,因此 sizeof(query) 的值是 $3$。
▼ 還有更多解析內容
📝 C 語言字串比對與大小
💡 理解字串結束字元、sizeof 用法及迴圈邏輯。
比較維度 sizeof(str) VS strlen(str)
計算對象 記憶體空間大小 有效字元個數
包含 \0 包含結尾的 \0 不包含 \0
運算時間 編譯時期決定 執行時期計算
💬sizeof 看的是容器總容量,strlen 看的是裝了幾個字。
🧠 記憶技巧:Sizeof 算到底,\0 也要計;比對完要歸零,次數才正確。
⚠️ 常見陷阱:最常忘記 sizeof 會把結尾的空字元 '\0' 也算進去,導致長度比視覺多 1。
strlen 函數 巢狀迴圈邏輯 空字元 \0 的定義

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

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

🏷️ 相關主題

C 語言程式設計:變數、指標、函式與編譯
查看更多「[電機與電子群資電類] 專業科目(2)」的主題分類考古題