← 回題目列表
c難度 ●●●
C5 — 字串其實是 char 陣列加一個結尾記號
Python 的 str 是一個物件,它自己知道自己多長,len(s) 隨問隨答。
C 沒有字串型別。所謂的字串就是一串 char,最後放一個值為 0 的字元(寫成 '\0')當作「到這裡結束」的記號。沒有人記錄長度——長度是數出來的。
題目
不要用 strlen,自己寫一個 my_strlen 函式,數出字串有幾個字元(不含結尾記號)。
預期輸出:
hello 的長度是 5
空字串的長度是 0
提示
從第 0 個字元開始往後走,一直走到遇見 '\0' 為止,走了幾步就是長度。
判斷條件可以寫成 s[i] != '\0'。
會照出 Python 藏了什麼
len(s) 在 Python 是 O(1)——長度早就存好了,直接讀出來。C 的 strlen 是 O(n),每次呼叫都要重新走一遍整個字串。
這解釋了一件事:在 C 裡把 strlen(s) 寫在迴圈的條件裡,會讓每一圈都重數一次,迴圈就從 O(n) 變成 O(n²)。Python 幫你藏起來的那個「長度」欄位,省掉的是這個。
順帶一提,這也是為什麼 C 的字串很容易出安全漏洞:如果那個 '\0' 不見了,程式會一直往後讀,讀進不屬於它的記憶體。
本機編譯
gcc main.c -o main.exe
./main.exe
需要先裝好 C 編譯器。Windows 可以用 MinGW-w64 或 w64devkit,macOS 與 Linux 通常內建或用套件管理器安裝。
寫在這裡
C 題不提供線上執行,自己在本機編譯,寫完可以請 AI 看看。
討論區
登入後就能留言和評分。
還沒有人留言。