判断一字符串是否为中心对称,程序能调通,但最后总出来个调试错误的对话框
#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; }
[解决办法]
[解决办法]
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;}