晕了,这是不是又有错呀~~~

caoyun 2003-08-21 09:28:12
这又是那本书上的题目,大家看看
回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
它给出的算法是这样的:
根据提示,算法可设计为:
 //以下为顺序栈的存储结构定义
 #define StackSize 100 //假定预分配的栈空间最多为100个元素
 typedef char DataType;//假定栈元素的数据类型为字符
 typedef struct{
  DataType data[StackSize];
  int top;
 }SeqStack;

 int IsHuiwen( char *t)
  {//判断t字符向量是否为回文,若是,返回1,否则返回0
   SeqStack s;
   int i , len;
   char temp;
   InitStack( &s);
   len=strlen(t); //求向量长度
   for ( i=0; i<len/2; i++)//将一半字符入栈
    Push( &s, t[i]);
   while( !EmptyStack( &s))
    {// 每弹出一个字符与相应字符比较
     temp=Pop (&s);
     if( temp!=S[i]) return 0 ;// 不等则返回0
     else i++;
    }
   return 1 ; // 比较完毕均相等则返回 1
  }
我看后感觉while(!EmptyStack(&s))的循环体有错误`~~它的第一个S[i]是
S[len/2+1],那么如果是godog这个字符串的话,S[len/2+1]应该是d吧.把d和o比较能相等吗??
我自己写了一个,大家给看看:
int isHuiWen(char *t)
{
LinkStack *S;
int i,len;
char temp;
len=strlen(t);
InitStack(&s);
for(i=0;i<len/2;i++)
push(&S,t[i]);
if(len%2==0)
{
while(!EmptyStack(&s))
{
temp=Pop(&s);
if(temp!=t[i]);
return 0;
i++;
}
return1;
}
else{
while(!EmptyStack(&s))
{
temp=Pop(&s);
if(temp!=t[i+1])
return 0;
i++;
}
return 1;
}
}
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oopig 2003-08-22
  • 打赏
  • 举报
回复
一个字符的字符串当然是回文,空字符串也是。
oopig 2003-08-22
  • 打赏
  • 举报
回复
不需要堆栈了,一个循环搞定!
//是回文返回1,否则返回0
int is_palindrome(char *msg)
{
int pal = 1;
int len = ::strlen(msg);
char *head = msg;
char *tail = msg + len - 1;
while (head < tail)
{
if (*head++ != *tail--)
{
pal = 0; //字符不对称,说明不是回文
break;
}
}
return pal;
}
caoyun 2003-08-21
  • 打赏
  • 举报
回复
如果是一个字符的字符串的话,那么就没有字符入栈了,这样,就跳过while的循环体了,这样返回是1。也就是说一个字符的字符串也是回文咯`~~~晕`~~~
caoyun 2003-08-21
  • 打赏
  • 举报
回复
我晕,学习了哈`~那按你这么说如果输入的是“”即输入的字符串是空字符串的话,是不是也要考虑呢~~~学习中`~~
vldb 2003-08-21
  • 打赏
  • 举报
回复
我上文回复有误,不知道怎么删,呵呵。
vldb 2003-08-21
  • 打赏
  • 举报
回复
你的代码也有问题,想想输入字符串只有一个字母的情况

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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