#include <iostream>
#include <stack>
#include <queue>

using namespace std;

bool isValideString(char* PStr)
{
	if(PStr == NULL)
		return 1;
	
	stack<char> left_cache;
	queue<char> right_cache;
	
	while(*PStr != '\0')
	{
		if(right_cache.empty())
		{
			cout << "right_cache empty entry >>>" << endl;
			switch(*PStr)
			{
				case '(':
					left_cache.push('(');
					break;
					
				case '[':
					left_cache.push('[');
					break;		

				case '{':
					left_cache.push('{');
					break;	

				case ')':
					right_cache.push(')');
					break;
					
				case ']':
					right_cache.push(']');
					break;		

				case '}':
					right_cache.push('}');
					break;					

				default:
					break;
					
			}
		}
		else
		{
			switch(*PStr)
			{
				case '(':
					return false;
				case '[':
					return false;	

				case '{':
					return false;	

				case ')':
					right_cache.push(')');
					break;
					
				case ']':
					right_cache.push(']');
					break;		

				case '}':
					right_cache.push('}');
					break;					

				default:
					break;
					
			}			
		}
		
		PStr++;
	}
	
	if(left_cache.size() != right_cache.size())
		return 0;
	
	if(left_cache.size() == 0)
		return 1;
	
	while(!left_cache.empty())
	{
		char left_str = left_cache.top();
		cout << "left str" << left_str << endl;
		char right_str = right_cache.front();
		cout << "right str" << right_str << endl;

		left_cache.pop();
		right_cache.pop();
		
		switch(left_str)
		{
			case '(':
				if(right_str == ')')
					break;
				else
					return 0;
			case '[':
				if(right_str == ']')
					break;
				else
					return 0;

			case '{':
				if(right_str == '}')
					break;
				else
					return 0;
			
			default:
				cout << "unexpected char" << endl;
				return 0;
		}
	}
	return true;
}

int main()
{
	char test[] = "k{a[jan(afjlka)alkfj]}";
	bool result = isValideString(test);
	
	cout << "result:" << result << endl;
}

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐