首頁 > 後端開發 > C++ > 如何可靠地偵測以分號結尾的 C'for”和'while”迴圈?

如何可靠地偵測以分號結尾的 C'for”和'while”迴圈?

Linda Hamilton
發布: 2024-12-15 18:09:10
原創
227 人瀏覽過

How Can I Reliably Detect C

偵測以分號結尾的C「for」和「while」迴圈

符合以分號結尾的C for 或while 迴圈- 使用正規表示式的冒號可能具有挑戰性。一種常見的方法是建立一個命名組來匹配平衡子字串,確保整個循環體包含在括號內。

但是,當迴圈體包含函數呼叫時,此方法就會失效,從而打破平衡。使用非正規表示式函數的簡化方法可以解決此問題。

用於循環匹配的自訂函數

以下自訂函數採用輸入字串並搜尋 for或 while循環後面接著一個分號:

def find_loop_and_semicolon(string):
    pos = string.find('(') + 1
    open_br = 0
    while open_br >= 0:
        char = string[pos]
        if char == '(':
            open_br += 1
        elif char == ')':
            open_br -= 1
        pos += 1
    return pos if open_br == 0 and string[pos] == ';' else -1
登入後複製

函數:

  1. 將位置計數器pos設定為循環左括號之前的位置。
  2. 初始化左括號計數器open_br 到 0。
  3. 迭代字串,遞增open_br 用於左括號,遞減它用於右括號。
  4. open_br 回到 0 時,到達右括號的位置。
  5. 檢查下一個位置的字元是否為分號以確認循環終止。
  6. 如果兩個條件都滿足,則回傳 pos 或 -1

用法

string = "for (int i = 0; i < 10; doSomethingTo(i));"
result = find_loop_and_semicolon(string)
if result != -1:
    print("Loop found and terminated with a semi-colon.")
else:
    print("No matching loop found.")
登入後複製

優點

  • 簡單:🎜簡單易懂,
  • 靈活性:它處理具有複雜體的循環,包括函數呼叫。
  • 無正規表示式開銷:避免了潛在的開銷和複雜性正規表示式。

以上是如何可靠地偵測以分號結尾的 C'for”和'while”迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板