Problema de coincidencia de símbolos

Consejo: Una vez escrito el artículo, la tabla de contenidos se puede generar automáticamente. Para saber cómo generarla, consulte el documento de ayuda a la derecha.
Resolver el problema de la coincidencia de cadenas de símbolos


Prefacio

Resolución de problemas de coincidencia de cadenas de símbolos

1. Ideas básicas

Utilice la característica estructural de primero en entrar, último en salir de la pila para implementar la coincidencia de símbolos. Cuando se encuentra un símbolo de la izquierda, el símbolo de la izquierda se empuja hacia la pila. Cuando se encuentra un símbolo de la derecha, el elemento superior de la pila aparece y coincide con el símbolo de la derecha. Si la coincidencia es exitosa, continúe con el siguiente paso de la coincidencia; si la coincidencia no es exitosa, se generará un mensaje indicando que la coincidencia no fue exitosa.

2. Pasos de uso

El código de implementación específico es el siguiente:

#include<iostream>
#include<stack>
#include<string>
using namespace std;

//符号匹配函数
void Matching()
{
    
    
	stack<char>str;
	int i = 0;
	cout << "请输入符号串(结束请输入#):";
	string s;
	cin >> s;
	str.push('#');  //符号栈第一个元素,防止后续出现str.top()为空,防止第一个符号为右符号时报错
	while (i < s.length())
	{
    
    
		switch (s[i])
		{
    
    
		case '{':str.push('{');  break;//左符号进栈
		case '[':str.push('[');  break;//左符号进栈
		case '(':str.push('(');  break;//左符号进栈
		case ')':
			if (str.top() == '(')  //切记符号中不能有空格,否则会一直报错:此表达式有副作用,将不予计算
			{
    
    
				str.pop();
			}
			else
			{
    
    
				cout << "符号匹配失败!";
				return;
			}
			break;
		case ']':
			if (str.top() == '[')
			{
    
    
				str.pop();
			}
			else
			{
    
    
				cout << "符号匹配失败!";
				return;
			}
			break;

		case '}':
			if (str.top() == '{') {
    
    
				str.pop();
			}
			else
			{
    
    
				cout << "符号匹配失败!";
				return;
			}
			break;

		}
		++i;

	}
	if (str.top() == '#')  //当符号栈只剩下#时代表匹配成功
		cout << "符号匹配成功!";
}

int main() 
{
    
    
	//符号匹配
	Matching();
}

3. Resultados de la operación

(1) Resultado de una coincidencia exitosa: Insertar descripción de la imagen aquí
(2) Resultado de una coincidencia fallida:
Insertar descripción de la imagen aquí

4. Cosas a tener en cuenta durante el proceso de emparejamiento

(1) Cuando utilice el interruptor, tenga cuidado de agregar un descanso después del caso. A veces nos olvidamos de agregar una interrupción después de ejecutar un caso. Esto fácilmente puede hacer que nuestro caso continúe ejecutando casos inútiles posteriores. Si el contenido de la matriz está involucrado, puede llevar fácilmente a que los subíndices de la matriz se salgan de los límites, etc.
(2) Al juzgar si los símbolos son iguales, recuerde no agregar espacios entre las comillas simples de los símbolos; de lo contrario, causará los siguientes problemas:
Insertar descripción de la imagen aquí
Este problema se refleja específicamente cuando depuramos el siguiente código:

if (str.top() == '[')
			{
    
    
				str.pop();
			}

Parecerá que str.top() es igual a '[', pero la instrucción str.pop() se omitirá automáticamente durante la depuración.

Resumir

Lo anterior es el contenido de la coincidencia de caracteres. Este artículo implementa la función de coincidencia de caracteres y resuelve algunos problemas menores encontrados durante el proceso de desarrollo. Aunque la idea del algoritmo de coincidencia de caracteres no es difícil, hay algunos problemas menores a los que se debe prestar atención, como los ejemplos anteriores. Finalmente, por favor dame el visto bueno y síguelo jaja.

Supongo que te gusta

Origin blog.csdn.net/qwpo135790/article/details/123661223
Recomendado
Clasificación