写题目看见的一个小题目,要求手写,我写了编译下发上来,关于栈的一个小判断,题目在注释处
/*假设以I和O分贝代表入栈和出栈操作,栈的初态和终态均为空
入栈和出栈的操作序列仅可由I和O组成的序列,可以操作的序列称为合法序列,
不可以操作的序列称为非法序列。
示例:合法:IOIIOIOO
IIIOOIOO
非法:IOOIOIIO
IIIOIOIO
写一个算法判定所给的操作序列是否合法,若合法则返回true,不合法返回false
*/
#include<iostream>
#include<stack>
#include<string.h>
using namespace std;
bool judge(char str[]);
int main()
{
char str[20];
cin>>str;
bool res = judge(str);
cout<<str<<endl;
cout<<res;
}
bool judge(char str[])
{
int len = strlen(str);
stack<char> s;
int I_num = 0;
int O_num = 0;
int j = 0;
for(int i = 0 ;i<len;i++)
{
if(str[i]=='I')
{
I_num++;
}
if(str[i]=='O')
{
O_num++;
}
}
if(I_num!=O_num)
{
return false;
}
else
{
for(j = 0 ;j<len;j++)
{
if(str[j]=='I')
{
s.push(str[j]);
}
if(str[j]=='O')
{
if(s.empty()==true)
{
return false;
}
else
{
s.pop();
}
}
}
}
if(j==len&&s.empty()==true)
{
return true;
}
else
{
return false;
}
}