>백엔드 개발 >C++ >세미콜론으로 끝나는 C 'for' 및 'while' 루프를 안정적으로 감지하려면 어떻게 해야 합니까?

세미콜론으로 끝나는 C 'for' 및 'while' 루프를 안정적으로 감지하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-15 18:09:10233검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.