标题:实现中心对称的字符的匹配!!!如:a+b@b+a#的检验!帮帮忙!!谢谢啦!!
只看楼主
tan2010
Rank: 2
等 级:论坛游民
帖 子:66
专家分:71
注 册:2011-10-13
结帖率:100%
已结贴  问题点数:10 回复次数:6 
实现中心对称的字符的匹配!!!如:a+b@b+a#的检验!帮帮忙!!谢谢啦!!
#include <stdio.h>//实现中心对称的字符的匹配
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef char SElemType;
typedef int Status;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef  struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
   S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
   if(!S.base)return ERROR;
   S.top=S.base;
   S.stacksize=STACK_INIT_SIZE;
   return OK;
}
Status push(SqStack &S,SElemType &c1)
{
    if(S.top-S.base>=S.stacksize){
        S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(SElemType));
        if(!S.base)return ERROR;
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
     }   
    *S.top++=c1;
    return OK;
}
Status gettop(SqStack &S,SElemType &e1)
{
    if(S.top==S.base)return ERROR;
    e1=*(S.top-1);
    return OK;
}//获得栈顶元素
Status pop(SqStack &S,SElemType e)
{
    if(S.top==S.base)return ERROR;
    e=*--S.top;
    return OK;
}
Status StackEmpty(SqStack &S)
{
    if(S.top==S.base)
        return OK;
    else
        return ERROR;
}
int main()
{
   SqStack S;
    InitStack(S);
    int a[10];int i;
    int b[10];int j;
    int k,k1;
    char c1,e1,e;
    printf("请输入数据:\n");
    while(c1!='#')
    {
        scanf("%c",&c1);
        push(S,c1);
    }
    printf("输入完毕\n");
    for(i=0;i<=10;i++)
    {
        while(e1!='@')
        {
          gettop(S,e1);
          a[i]=e1;
        }
        if(e1=='@'){k=i;break;}
    }
    k1=0;
    for(j=0;j<=10;j++)
    {
        while(!StackEmpty(S))
        {
            pop(S,e);
            b[j]=e;
            k1++;
        }
    }
    for(i=0,j=1;i<=k,j<=k1;i++,j++)
    {
        if(a[i]!=b[j])printf("该序列不对称");
       else
           if(i==k&&j==k)printf("该序列中心对称");
    }
    return OK;
}
搜索更多相关主题的帖子: 检验 中心对称 include return 
2011-11-03 19:51
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:9 
程序代码:
#include <stdio.h>//实现中心对称的字符的匹配
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef char SElemType;
typedef int Status;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef  struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
    S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S.base)
    {
        return ERROR;
    }
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}
Status push(SqStack &S,SElemType &c1)
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(SElemType));
        if(!S.base)
        {
            return ERROR;
        }
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }  
    *(S.top++)=c1;//////
    return OK;
}
Status gettop(SqStack &S,SElemType &e1)
{
    if(S.top==S.base)
    {
        return ERROR;
    }
    e1=*(--S.top);/////////
    return OK;
}//获得栈顶元素
Status pop(SqStack &S,SElemType &e)
{
    if(S.top==S.base)
    {
        return ERROR;
    }
    e=*--S.top;
    return OK;
}
Status StackEmpty(SqStack &S)
{
    if(S.top==S.base)
        return OK;
    else
        return ERROR;
}
int main()
{
    SqStack S;
    InitStack(S);
    int a[10];
    int i;
//    int b[10];
//    int j;
    int k;////
    char c1,e1;////
    printf("请输入数据:\n");
    scanf("%c",&c1);///////////
    while(c1!='#')/////////////
    {
        push(S,c1);
        scanf("%c",&c1);
    }
    printf("输入完毕\n");/*
    for(i=0;i<=10;i++)
    {
        while(e1!='@')
        {
            gettop(S,e1);
            a[i]=e1;
            printf("%c ",e1);
        }
        printf("\n");
        if(e1=='@')
        {
            k=i;
            break;
        }
    }*/
    i=0;
    while(pop(S,e1))
    {
        a[i]=e1;
        i=i+1;
    }
    k=i;
//    k1=0;
/*    for(j=0;j<=10;j++)
    {
        while(!StackEmpty(S))
        {
            pop(S,e1);///////////////
            b[j]=e1;///////////
            k1++;
        }
    }
    for(i=0,j=1;i<=k,j<=k1;i++,j++)
    {
        if(a[i]!=b[j])
        {
            printf("该序列不对称");
        }
        else if(i==k&&j==k)
        {
            printf("该序列中心对称");
        }
    }*/
    for(i=0;i<k/2;i++)
    {
        if(a[i]!=a[k-i-1])
        {
            printf("该序列不对称\n");
            return 0;
        }
    }
    printf("该序列中心对称\n");
    return OK;
}
2011-11-04 09:40
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:1 
回复 2楼 laznrbfe
输入的字符串不能超过10,当然你可以修改数组a[]的长度。
2011-11-04 09:40
tan2010
Rank: 2
等 级:论坛游民
帖 子:66
专家分:71
注 册:2011-10-13
得分:0 
回复 2楼 laznrbfe
好厉害啊!!!万分谢谢!!!
2011-11-04 16:43
tan2010
Rank: 2
等 级:论坛游民
帖 子:66
专家分:71
注 册:2011-10-13
得分:0 
呵呵,细想下,觉得这样好像又变回用数组了,能不能用栈实现啊!! 麻烦了!!!
2011-11-04 16:53
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:0 
回复 5楼 tan2010
不懂了,
2011-11-04 18:03
tan2010
Rank: 2
等 级:论坛游民
帖 子:66
专家分:71
注 册:2011-10-13
得分:0 
回复 6楼 laznrbfe
呵呵,没事,还是得感谢你!!!
2011-11-05 14:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-354200-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019168 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved