Registro de preguntas de OJ Brush: Determine si los corchetes en una cadena coinciden con el número de pregunta: 616

Determine si los corchetes en una cadena coinciden con el número de pregunta: 616

Requisitos de la asignatura:

Lea una cadena de caracteres del teclado, que contiene solo () {} [], y juzgue si cada tipo de corchete en la cadena de caracteres aparece en pares.

Sugerencia: se puede implementar con la ayuda de una pila. Los paréntesis deben aparecer en pares, como () [] {}, que son paréntesis coincidentes, como ([{])}, que son paréntesis no coincidentes (sin espacios entre ellos).

Ingrese descripción

Ingrese una cadena (sin espacios entre ellos)

Descripción de salida

Salida coincidente sí, de lo contrario salida no

Muestra de entrada

(([{}]))

Salida de muestra

si

Ideas para la resolución de problemas: el
uso de pilas puede resolver este problema de manera muy inteligente. Atraviese la cadena, si el carácter es un paréntesis izquierdo, coloque este carácter en la pila, si es un paréntesis derecho, saque un carácter de la pila y juzgue si el carácter saltado es el paréntesis izquierdo correspondiente, si lo es, continúe atravesando, si no , Los corchetes no coinciden, salen del ciclo y devuelven el resultado del juicio. Una vez que finaliza el ciclo, se emite sí o no según el resultado del juicio.

Código de despacho de aduana:

#include <iostream>

#define MaxSize 100

using namespace std;

class Matcher {
    
    
	public:
		Matcher();
		
	public:
		void Push(char ch);
		char Pop();
		bool isEmpty();		
		bool Match(string str);
		
	private:
		char arr_[MaxSize];
		int top_;
};

Matcher::Matcher() {
    
    
	top_ = -1;
}

void Matcher::Push(char ch) {
    
    
	if (top_ == MaxSize) throw "上溢";
	
	arr_[++top_] = ch;
}

char Matcher::Pop() {
    
    
	if (top_ < 0) throw "None";
	
	char res = arr_[top_];
	top_--;
	
	return res;
}

bool Matcher::isEmpty() {
    
    
	return top_ < 0 ? true : false;
}

bool Matcher::Match(string str) {
    
    
	int LEN = str.size();
	bool isMatch = true;
	
	for (int i = 0; i < LEN; i++) {
    
    
		if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
    
    
			Push(str[i]);
		} else {
    
    
			
			if (str[i] == ')') {
    
    
				if (isEmpty() || Pop() != '(') {
    
    
					isMatch = false;
					break;
				}
			} else if (str[i] == ']') {
    
    
				if (isEmpty() || Pop() != '[') {
    
    
					isMatch = false;
					break;
				}
			} else if (str[i] = '}') {
    
    
				if (isEmpty() || Pop() != '{') {
    
    
					isMatch = false;
					break;
				}
			}
			
		}
	}
	
	return isMatch;
} 

int main() {
    
    
	Matcher m;
	string str;
	
	cin >> str;
	
	cout << (m.Match(str) ? "yes" : "no");
	
	return 0;
}

completar.

Supongo que te gusta

Origin blog.csdn.net/weixin_45711556/article/details/108829002
Recomendado
Clasificación