回文用栈实现的问题,大家来帮我改错啊,我新手确实写不出来了(在线等)

as11qwer 2008-10-26 07:47:35
读入一行文本,将文本中的空格过滤掉
判断滤掉空格后的字符串是否是回文,比如“dad“是回文,“abccba”是回文

调用cin.getline()读入一行文本,并用函数Deblank滤掉空格
第一次扫描,将每个字符压入栈,产生一个存放串的逆序的表
第二次扫描,将原串中的每个字符与从栈中弹出的元素比较
若字符不等,则程序终止,该串不是回文
若直到栈空时还在比较,则该文本为回文
大家请把错的地方给我改过来,注释一下,我真不怎么会,你们也可重写一个,谢谢大家了

#include<iostream.h>
//using namespace std;
#include<stdlib.h>
class stack
{
public:
void sstack(int top=0,int last=0){itstop=top;itslast=last;}
void setstack(){itstop=itslast;}
int gettop(int f){return itstop=f;}
int getlast(int f){return itslast=f;}
private:
int itstop;
int itslast;
};
class input
{
public:
char getline(char b[50]){}
char deblank(char b[50]){}
private:
char b[50];
};
char input::getline(char b[50])
{
int i;
cout<<"请输入一行字符串:"<<endl;
for(i=0;i<50;i++)
{cin>>b[i];}
return 1;
}
char input::deblank(char b[50])
{
int i;char a[1]=" ";
for(i=0;i<50;i++)
{
if(b[i]=a[0]) return 0;
else return 1;
}
}
void main()
{
char a[50];
int j;
int top;int last;
stack A;
input B;
B.getline(char a[50]);
B.deblank(char a[50]);
A.setstack(top,last);
for(j=0;j<50;j++)
{
cin>>a[j];
A.gettop(*top)=a[j];
A.gettop(*top)++;
}
for(j=49;j>=0;j--)
{
if(A.gettop(top)==a[j]) A.gettop(top)--;
}
if(A.gettop(top)=A.getlast(last)) cout<<"该字符串是回文!!"<<endl;
else cout<<"该字符不是回文!!"<<endl;
}






...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
as11qwer 2008-10-26
  • 打赏
  • 举报
回复
加我QQ吧58644786
as11qwer 2008-10-26
  • 打赏
  • 举报
回复
我明白了,太感谢你了,真强!!
baihacker 2008-10-26
  • 打赏
  • 举报
回复
如果不为空,那么返回栈顶的值,否则返回0;
as11qwer 2008-10-26
  • 打赏
  • 举报
回复
char top(){ return m_top ? data[m_top-1] : 0;}能给我解释下这句吗?
baihacker 2008-10-26
  • 打赏
  • 举报
回复
#include <iostream> 
#include <cstdlib>
#include <cstring>
using namespace std;
class stack
{
public:
stack(){m_top = 0;}
char top(){ return m_top ? data[m_top-1] : 0;}
void pop() { m_top ? --m_top : 0;}
void push(char c){data[m_top++] = c;}
private:
int m_top;
char data[64];
};

class input
{
public:
static void getline(char b[50]);
static void deblank(char b[50]);
};

void input::getline(char b[50])
{
cout <<"请输入一行字符串:" <<endl;
gets(b);
}

void input::deblank(char b[50])
{
char* curr = b;
while (*curr=*b++)
if (*curr != ' ') ++curr;
}
int main()
{
char a[50];
int j;
int top;
int last;
int OK = 1;
stack A;
input::getline(a);
input::deblank(a);
for (j = 0; j < strlen(a); ++j)
A.push(a[j]);
for (j = 0; j < strlen(a)/2; ++j)
{
if (A.top() != a[j])
{
OK = 0;
break;
}
A.pop();
}
if(OK) cout <<"该字符串是回文!!" <<endl;
else cout <<"该字符不是回文!!" <<endl;
}
as11qwer 2008-10-26
  • 打赏
  • 举报
回复
没按照题意,不行啊,尼奥,要按题意写,呵呵
baihacker 2008-10-26
  • 打赏
  • 举报
回复
#include <iostream> 
#include <string>
#include <cstdlib>
#include <stack>
using namespace std;

int check(string str)
{
stack<char> s;
int i;
for (i = 0; i < str.length(); ++i)
s.push(str[i]);
for (i = 0; i < str.length()/2; ++i)
{

char t = s.top();
s.pop();
if (t != str[i]) return 0;
}

return 1;
}

int main()
{
string a = "12321";
string b = "1231";
cout << check(a) << endl;
cout << check(b) << endl;
return 0;
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧