商场营运管理制度:以下是我写的串的匹配与逆置的程序,总是不能运行,问题是在链的创建上,希望能有能人指点迷津

来源:百度文库 编辑:高校问答 时间:2024/05/09 11:58:35
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
typedef char elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}linkstr;
linkstr *s,*t,*p,*r;
linkstr *crtlinked();
void delete_aftre();
linkstr *InvertSubstring( )
{
linkstr *begin,*p,*t1,*r,*q,*u,*pr;
pr=s;
p=s;
t1=t;
if(p==NULL||t1==NULL)
printf("It is error!\n");
else
{
while(p!=NULL && t1!=NULL)
{
if(p->data==t1->data)
{
p=p->next;
t1=t1->next;
}
else
{
begin=pr;
pr=pr->next;
p=pr;
t1=t;
}
}
if(t1!=NULL)
{
printf("There is no string to match\n");
}
else
{
q=begin->next;
r=q->next;
q->next=p;
while(r!=p)
{
u=r->next;
r->next=q;
q=r;
r=u;
}
begin->next=q;
}
return s;
}

linkstr *crtlinked()
{
linkstr *s,*head;
char ch;
head=NULL;
int i;
head=(linkstr *)malloc(sizeof(linkstr));
p=head;
printf("Please input the data to the frist list:\n");
printf("If you want to end ,input'#':\n");
scanf("%c",&ch);
while(ch[i]!='#')
{
s=(linkstr *)malloc(sizeof(linkstr));
s->data=ch;
if(head==NULL) head=s;
else p->next=s;
p=s;
scanf("%c",&ch);
}
p->next=NULL;
//head=NULL;
//q=head;
//printf("Please input the data to the second list:\n");
// printf("If you want to end ,input'#'\n");

// for(j=0;j<MAXSIZE;j++)
//{
// scanf("%c",&ch[j]);
// }
//j=0;
// while(ch[j]!='#')
//{

// t->data=ch[j];
// if(head==NULL) head=t;
// else q->next=t;
// q=t;
// j++;
}
}

void delete_after()
{
linkstr *s;
r=p->next;
p->next=r->next;
free(r);
}

void main()
{
linkstr *s,*t;
crtlinked();
linkstr *InvertSubstring( );
printf("比较逆置后的主串为:\n");
printf("%c",*s);
delete_after();
}

1.linkstr *InvertSubstring( ) 在return s; 前少了一个花括号:}

2.linkstr *crtlinked() 中ch 是字符类型的,while(ch[i]!='#')使用错误,
将ch 定义为char *ch类型
3.linkstr *crtlinked() 最后多了一个花括号:}

可能你将第一个函数的括号加到第二个函数上去了!仔细点哈!

修改后的代码(只是能编译通过,没有看你的逻辑是否正确,这个问题自己搞定):
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
typedef char elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}linkstr;
linkstr *s,*t,*p,*r;
linkstr *crtlinked();
void delete_aftre();
linkstr *InvertSubstring( )
{
linkstr *begin,*p,*t1,*r,*q,*u,*pr;
pr=s;
p=s;
t1=t;
if(p==NULL||t1==NULL)
printf("It is error!\n");
else
{
while(p!=NULL && t1!=NULL)
{
if(p->data==t1->data)
{
p=p->next;
t1=t1->next;
}
else
{
begin=pr;
pr=pr->next;
p=pr;
t1=t;
}
}
if(t1!=NULL)
{
printf("There is no string to match\n");
}
else
{
q=begin->next;
r=q->next;
q->next=p;
while(r!=p)
{
u=r->next;
r->next=q;
q=r;
r=u;
}
begin->next=q;
}
}
return s;
}

linkstr *crtlinked()
{
linkstr *s,*head;
char ch;
head=NULL;
int i;
head=(linkstr *)malloc(sizeof(linkstr));
p=head;
printf("Please input the data to the frist list:\n");
printf("If you want to end ,input'#':\n");
scanf("%c",&ch);
while(ch !='#')
{
s=(linkstr *)malloc(sizeof(linkstr));
s->data=ch;
if(head==NULL) head=s;
else p->next=s;
p=s;
scanf("%c",&ch);
}
p->next=NULL;
//head=NULL;
//q=head;
//printf("Please input the data to the second list:\n");
// printf("If you want to end ,input'#'\n");

// for(j=0;j<MAXSIZE;j++)
//{
// scanf("%c",&ch[j]);
// }
//j=0;
// while(ch[j]!='#')
//{

// t->data=ch[j];
// if(head==NULL) head=t;
// else q->next=t;
// q=t;
// j++;
}

void delete_after()
{
linkstr *s;
r=p->next;
p->next=r->next;
free(r);
}

void main()
{
linkstr *s,*t;
crtlinked();
linkstr *InvertSubstring( );
printf("比较逆置后的主串为:\n");
printf("%c",*s);
delete_after();
}