Heim >Backend-Entwicklung >C++ >Wie kann ich C-„for'- und „while'-Schleifen, die mit einem Semikolon enden, zuverlässig erkennen?

Wie kann ich C-„for'- und „while'-Schleifen, die mit einem Semikolon enden, zuverlässig erkennen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 18:09:10229Durchsuche

How Can I Reliably Detect C

Erkennen von C-„for“- und „while“-Schleifen mit Semikolon-Abschluss

Abgleich von C-for- oder while-Schleifen, die mit einem Semikolon enden -Doppelpunkt mit einem regulären Ausdruck kann eine Herausforderung sein. Ein gängiger Ansatz besteht darin, eine benannte Gruppe zu erstellen, um ausgeglichene Teilzeichenfolgen abzugleichen und sicherzustellen, dass der gesamte Schleifenkörper in Klammern steht.

Diese Methode gerät jedoch ins Stocken, wenn der Schleifenkörper einen Funktionsaufruf enthält, wodurch das Gleichgewicht gestört wird. Ein vereinfachter Ansatz mit einer Nicht-Regex-Funktion kann dieses Problem lösen.

Benutzerdefinierte Funktion für den Schleifenabgleich

Die folgende benutzerdefinierte Funktion nimmt eine Eingabezeichenfolge und sucht nach einem for oder while-Schleife gefolgt von einem Semikolon:

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

Die Funktion:

  1. Setzt den Positionszähler pos an die Position direkt vor der öffnenden Klammer der Schleife.
  2. Initialisiert einen Zähler für offene Klammern open_br auf 0.
  3. Iteriert durch die Zeichenfolge , wobei open_br zum Öffnen von Klammern inkrementiert und zum Schließen dekrementiert wird Klammern.
  4. Wenn open_br auf 0 zurückkehrt, ist die Position der schließenden Klammer erreicht.
  5. Überprüft zur Bestätigung, ob das Zeichen an der nächsten Position ein Semikolon ist Schleifenbeendigung.
  6. Gibt pos zurück, wenn beide Bedingungen erfüllt sind oder -1 sonst.

Verwendung

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.")

Vorteile

  • Einfachheit: Die Funktion ist leicht verständlich und implementieren.
  • Flexibilität: Es verarbeitet Schleifen mit komplexen Körpern, einschließlich Funktionsaufrufen.
  • Kein Regex-Overhead: Vermeidet den potenziellen Overhead und die Komplexität von reguläre Ausdrücke.

Das obige ist der detaillierte Inhalt vonWie kann ich C-„for'- und „while'-Schleifen, die mit einem Semikolon enden, zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn