template <typename T>
void API(SeqStack<T> &S)
{
char ch = 0;
string str = "";
while (cin.get(ch))//按按字符读入数据
{
if (ch == '\n' || ch == '\r')//若ch为回车键或者换行,跳出循环
break;
S.Push(ch);//将所有数据压入栈中
}
int len = S.getSize();//获得栈(数据)的长度
for (int i = 0; i < len / 2; i++)//将栈中的一半数据提取到字符串中(提取的个数为偶数,例如5/2=2,剩下的奇数个元素会留在栈中)
{
S.Pop(ch);
str += ch;
}
if (len % 2 != 0)//提取完毕后判断栈中剩下元素是不是及数个,如果是的话就将栈顶元素出栈(因为如果奇数串是回文串的话,最中间的元素是不影响它成为回文串的)
{
S.Pop(ch);
}
for (int i = len / 2 - 1; i >= 0; i--)//将提取出的元素构成的字符串与栈中剩下元素一一比较
{
S.getTop(ch);
if (ch == str[i])
S.Pop(ch);//若相同,则将该元素出栈
}
if (S.IsEmpty())//若栈中剩余元素为0,则说明全部匹配,是回文串
{
cout << "yes";
}
else
{
cout << "no";
}
}