实验内容
[问题描述]
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
[基本要求]
对于键盘输入的任意一个字符串,将其进行逆置,判断原串和逆置的串是否完全一致,完全一致则为回文,因此分别利用队列的先进先出(FIFO)和栈的后进先出(FILO)实现,算法只能使用一个栈和一个队列以及若干简单类型变量,算法时间复杂度应为O(n)。
【代码】
- #include<iostream>
- #include<stack>
- #include<queue>
- using namespace std;
- bool palindrome();
- int main()
- {
- cout<<"请输入字符串(以@结束,中间部分以&分开)"<<endl;
- if(palindrome()==true)
- {
- cout<<"是回文。";
- }
- else
- {
- cout<<"不是回文。";
- }
- system("pause");
- }
- bool palindrome()
- {
- stack<char> s;
- queue<char> q;
- char str;
- while((str=getchar())!='@')
- {
- q.push(str);
- s.push(str);
- }
- if(s.size()%2==0)
- {
- return false;
- }
- else
- {
- while(!s.empty() && !q.empty())
- if(s.top()!=q.front())
- return false;
- else
- return true;
- }
- }
【运行结果】
注:以上内容仅供参考,如有问题欢迎指正
转载于:https://blog.51cto.com/sincerecorner/695951