C++:stack queue用法示例
#include <iostream>#include <stack>#include <queue>using namespace std;bool isValideString(char* PStr){if(PStr == NULL)return 1;stack<char> left_cache;queue&...
·
#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;
}
更多推荐
已为社区贡献2条内容
所有评论(0)