回 帖 发 新 帖 刷新版面

主题:请教大家关于回文的问题

判断一个字符串是否是回文,如abdba,affa
#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
  }
  上面有个地方看不懂,即if( temp!=S[i])  return 0 ;// 不等则返回0
这里temp!=S[i]是不是有问题?请指教,谢谢!

回复列表 (共5个回复)

沙发

我觉得是有问题,如果是奇数个就有问题



while( !EmptyStack( &s))
    {// 每弹出一个字符与相应字符比较
     temp=Pop (&s);
     if( temp!=S[i])  return 0 ;// 不等则返回0
     else i++;
    } 

前面加一句:
if(len & 0x1)
       i++;

你看的那个地方没问题,Pop()是去栈顶元素,然后删除栈顶元素。

板凳

这种方法判断回文太低效~
应该用一个栈和一个队列

3 楼

这个。。判断回文是可以这样的
for(i = 0, j = n - 1; i < j; i++, j--)
    if(s[i] != s[j])...
不过显然楼主是完成堆栈一章的习题了。

4 楼

好奇怪的,你们的想法!
我觉得用一个数组存储字符串,然后a[i]和a[n-i-1]想比较就可以了
当然,i<=n/2.

5 楼

怎么做都是一样的,显然这是做一个链表一章的练习。

我来回复

您尚未登录,请登录后再回复。点此登录或注册