读书人

判断一字符串是否为中心对称程序能调

发布时间: 2012-10-26 10:30:59 作者: rapoo

判断一字符串是否为中心对称,程序能调通,但最后总出来个调试错误的对话框
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100


typedef struct node
{
char data;
struct node *next;
}node,*link;

typedef struct
{
char ch[MAXSIZE];
int top;
}stack;
void initLink(link L)
{
L=(link)malloc(sizeof(node));
L->next=NULL;

}
void createLink(link L,int n)
{
node *s;
char c;
int i;
L->next=NULL;
for(i=0;i<n;i++)

{
printf("请输入第%d个字符",i+1);
c=getchar();
s=(node*)malloc(sizeof(node));
s->data=c;
s->next=L->next;
L->next=s;
getchar();


}
//return(L);

}
void print(link L)
{
link p;
p=L->next;
while(p!=NULL)
{
printf("%5c",p->data);
p=p->next;
}
}

//初始化
void initstack(stack *s)
{
s->top=-1;
}
//判空
int IsEmpty(stack *s)
{
return (s->top==-1);
}

//进栈
int push(stack *s,char x)
{
if(s->top==MAXSIZE-1)
return(0);
s->top++;
s->ch[s->top]=x;

return(1);

}
//出栈
void pop(stack *s)
{
if(s->top==-1)
printf("栈空\n");
else
{
//printf("%c已出栈\n",s->ch[s->top]);
s->top--;
//printf("%d\n",s->top);


}

}
//取栈顶元素,栈顶指针保持不变
int GetTop(stack *s,char* x)
{
if(s->top==-1)
return(0);
else
{
*x=s->ch[s->top];
return(1);
}
}

//
void IsCycl(link L,int n)
{
int i;

stack s;
link p;
//printf("hellp");
initstack(&s);
p=L->next;

for(i=0;i<n/2;i++)
{
push(&s,p->data);
p=p->next;

}//for

if(n%2!=0)
p=p->next;
for(i=0;i<n/2;i++)
{
if(p->data==s.ch[s.top])
{
pop(&s);
p=p->next;
}
else
break;


}
if(IsEmpty(&s))
printf("是回文\n");
else
printf("不是回文\n");





}


int main()
{
int n=3;
link L=(link)malloc(sizeof(link));
initLink(L);
createLink(L,n);
print(L);
IsCycl(L,n);
free(L);
return 0;

}

程序能调通,但是总出来下面这个错误报告。不知道为什么。请大家帮忙:)谢谢!
Debug Error
Damage:after normal block(#041)at 0x00430140
(press retry to debug the applictaion)
终止 重试 忽略



[解决办法]
link L=(link)malloc(sizeof(link));
改为
link L=(link)malloc(sizeof(*link));
link是指针类型
而你要分配结构的大小

[解决办法]
link L=(link)malloc(sizeof(link));
改为
link L=(link)malloc(sizeof(struct node ));


[解决办法]

C/C++ code
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct node {     char data;     struct node *next; }node,*link; typedef struct {     char  ch[MAXSIZE];     int top; }stack; void initLink(link L) {     L=(link)malloc(sizeof(node));     L->next=NULL;     } void createLink(link L,int n) {     node *s;     char c;     int i;     L->next=NULL;     for(i=0;i <n;i++)             {         printf("请输入第%d个字符",i+1);         c=getchar();         s=(node*)malloc(sizeof(node));         s->data=c;         s->next=L->next;         L->next=s;         getchar();                     }     //return(L);     } void print(link L) {     link p;     p=L->next;     while(p!=NULL)     {         printf("%5c",p->data);         p=p->next;     } } //初始化 void initstack(stack *s) {     s->top=-1; } //判空 int IsEmpty(stack *s) {     return (s->top==-1); } //进栈 int  push(stack  *s,char  x) {     if(s->top==MAXSIZE-1)         return(0);     s->top++;     s->ch[s->top]=x;         return(1);     } //出栈 void  pop(stack *s) {     if(s->top==-1)         printf("栈空\n");     else     {         //printf("%c已出栈\n",s->ch[s->top]);         s->top--;         //printf("%d\n",s->top);                     }     } //取栈顶元素,栈顶指针保持不变 int GetTop(stack *s,char* x) {     if(s->top==-1)         return(0);     else     {         *x=s->ch[s->top];         return(1);     } } // void IsCycl(link L,int n) {     int i;         stack s;     link p;     //printf("hellp");     initstack(&s);     p=L->next;         for(i=0;i <n/2;i++)     {         push(&s,p->data);         p=p->next;             }//for         if(n%2!=0)         p=p->next;     for(i=0;i <n/2;i++)     {         if(p->data==s.ch[s.top])         {             pop(&s);             p=p->next;         }         else             break;                     }     if(IsEmpty(&s))         printf("是回文\n");     else         printf("不是回文\n");                 } int main() {     int n=3;     link L=(link)malloc(sizeof(struct node));     initLink(L);     createLink(L,n);     print(L);     IsCycl(L,n);     free(L);     return 0;     } 


[解决办法]

探讨
1、为什么在main()中要给L一个指向?不给L动态分配一个空间,程序就出错,为什么?
2、在intLink()中动态分配了一个node大小的空间,但此时在main()中动态分配的空间不就没有指向了么?

[解决办法]
char *str;
int len = strlen( str );
char *str1 *str2;
str1 = str;
*( str1 + len/2 ) = '\0';
str2 = ( str + len/2 - len%2 );
strcmp( str1 , str2 );

[解决办法]
失去了栈的本意,大材小用了。
[解决办法]
探讨
失去了栈的本意,大材小用了。

[解决办法]
C/C++ code
#include <cstring>bool IsBalancedString(char *str){    if(str)    {         int count = strlen(str);         int head = 0;         int tail = count - 1;         while( (head < tail) && (str[head] == str[tail]))         {             head++;             tail--;         }         if(head < tail)             return false;         else             return true;    }    return true;}int main(int argc, char argv[]) {    char a[] = "abcdedcba";    cout << (IsBalancedString(a)? "Is balanced" : " Not balanced") << endl;    return 0;} 

读书人网 >C语言

热点推荐