数据结构c语言版 :算法设计题 求大神解答。。在线等。。。

2024-11-18 22:26:03
推荐回答(3个)
回答1:

/*判断一段字符串是不是回文,所谓回文,也就
是正读反读都一样,如asdffdsa*/

#include
#include
using namespace std;
const int size=100;
class HuiWen
{
private:
char ch[100];
int top;
public:
HuiWen(){top = -1;};
void input(char c);
bool isHuiWen();
bool empty();
};
void HuiWen::input(char c)
{
//if(top==size-1) throw"上溢";
top++;
//cin>>ch[top];
ch[top]= c;
}
bool HuiWen::isHuiWen()
{
for(int i=0;iif(ch[top--]!=ch[i])
return 0;
return 1;
}
bool HuiWen::empty()
{
if(top==-1)
return 1;
return 0;
}
int main()
{
HuiWen hw;
cout<<"请输入字符串,以回车键结束"<int c;
while((c=getchar())!='\n')
hw.input(c); //主要就是这里做了修改。

if(hw.empty())
cout<<"对不起,无字符"<else
{
if(hw.isHuiWen())
cout<<"该字符串是回文"<else
cout<<"该字符串不是回文"<}
return 0;
}

回答2:

大概的原理是这样,你的题目没给清楚代码。
//返回TRUE或者非零表示是回文,返回FALSE或者0表示不是回文
int IsHuiwen(char *str)

{
int top, len;

char stack[MAX_SIZE]; //用数组模拟顺序栈

top = 0;

len = strlen(str);

while (top <= len/2) //将前一半的字符入栈

{
stack[top++] = *str++;

}

if (len%2 != 0) //如果有奇数个字符,那中间的那个是对称点,不用判断,直接出栈即可

{
--top;

}

while (top >= 0)

{
if (stack[top--] != *str++) //挨个出栈和后一半的字符比较,有一个不匹配就说明不是回文

return FALSE;

}

return TRUE; //说明是回文

}
以上代码未测试,有问题再问。

回答3:

题目不完整,自己写一个
bool isHuiwen(char *p)
{
int l=strlen(p);
for(i=0;i {
if(p[i]!=p[l-1-i])
return false;
}
return true;
}