local function definitions are illegal是说我哪错了?
本来都一切正常的,后来加了一句话之后再查错,就发现好多函数都出现这句提示,但是我都没有改动其他的函数啊,而且main也说有问题error C2601: 'main' : local function definitions are illegal
fatal error C1004: unexpected end of file found
请大家帮我下了……这种时候一般是什么错了
代码:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
struct seqstring{/*定义字符串类型*/
int maxnum;
int n;
char * c;
};
typedef struct seqstring * pseqstring;
struct node;
typedef struct node * pnode;
struct node{
pseqstring str;
pnode link;
};
struct linkstack{
pnode top;
};
typedef struct linkstack * plinkstack;
pseqstring createnullstr(int m){/*创建空串*/
pseqstring pstr=(pseqstring)malloc(sizeof(struct seqstring));
if(pstr!=NULL){
pstr->c=(char *)malloc(sizeof(char)*m);
if(pstr->c){
pstr->n=0;
pstr->maxnum=m;
return(pstr);
}
else free (pstr);
}
printf("out of space!\n");
return NULL;
}
void makenext(pseqstring p,int *next){/*计算next数组*/
int i=0,k=-1;
next[0]=-1;
while(i<p->n-1){
while(k>=0&&p->c[i]!=p->c[k]) k=next[k];
i++;
k++;
if(p->c[i]==p->c[k]) next[i]=next[k];
else
next[i]=k;
}
}
int pmatch(pseqstring t,pseqstring p,int *next){/*模式匹配函数*/
int i,j;
i=0;
j=0;
while(i<p->n&&j<t->n)
if(i==-1||p->c[i]==t->c[j]){
i++;
j++;
}
else
i=next[i];
if(i>=p->n)
return (j-p->n+1);
else
return 0;
}
pseqstring getstring(void){/*读入字符串,返回相应字符串*/
int limit,i;
char * p;
pseqstring res;
printf("请输入字符串长度:\n");
if((scanf("%d",&limit))!=1){
printf("输入有误!\n");
return NULL;
}
res=(pseqstring)malloc(sizeof(struct seqstring));/*申请空间将p扩充为字符串形式pseqstring*/
if(res==NULL) {
printf("failed!\n");
return NULL;
}
p=(char *)malloc(sizeof(char)*limit);
if(p==NULL){
printf("out of space!operation failed\n");
return NULL;
}
else{/*读入串存入数组中*/
res->c=p;
printf("输入字符串\n");
while(getchar()!='\n') ;
for(i=0;i<limit&&scanf("%c",&res->c[i]);i++) {
if(res->c[i]=='\n') break;
}
}
res->maxnum=limit;
res->n=i;
return res;
}
void pushlink(plinkstack plstack,pseqstring x){
pnode p;
p=(pnode)malloc(sizeof(struct node));
if(p==NULL) printf("out of space\n");
else{
p->str=x;
p->link=plstack->top;
plstack->top=p;
}
}
void output(pseqstring str){/*输出函数*/
int i;
if(str==NULL) printf("字符串为空");
else {
for(i=0;i<str->n;i++) printf("%c",str->c[i]);/*依次打印字符数组中的每个字符*/
putchar('\n');
}
pseqstring insert(int i,char c,pseqstring str){/*插入函数,在第i个字符后插入c,返回处理后的字符串*/
int j;
if(i<0||i>str->n){/*如果插入位置不合理,直接返回原字符串不作处理*/
printf("原字符串只有%d个字符,操作失败\n");
return str;
}
else{
if(str->n==str->maxnum){/*如果数组已满,也不能进行插入*/
printf("溢出!");
return str;
}
else{
for(j=str->n;j>=i;j--)
str->c[j+1]=str->c[j];
str->c[i]=c;
str->n+=1;
}
return str;
}
}
pseqstring del(int i,pseqstring str){/*删除下标i的元素*/
int j;
if(str->n==0){
printf("数组空,无法删除!\n");
return str;
}
for(j=i;j<str->n;j++) str->c[j]=str->c[j+i];
str->n-=1;
return str;
}
int search(pseqstring str,pseqstring match){/*查找函数*/
int * next;
next=(int *)malloc(sizeof(int)*match->n);
if(next==NULL) {
printf("out of space\n");
return -1;
}
else{
makenext(match,next);
return (pmatch(str,match,next));/*正常情况下返回模式匹配的结果*/
}
}
pseqstring replace(pseqstring rep1,pseqstring rep2,pseqstring str){/*用rep2替换str中所有rep1*/
int a,i;
int * next1;
next1=(int *)malloc(sizeof(int)*rep1->n);
if(next1==NULL) {
printf("out of space!\n");
return str;
}
makenext(rep1,next1);
while((a=search(str,rep1))!=0){/*当字符串中仍有可替换项时*/
for(i=a;i<rep1->n;i++) str=del(a,str);/*依次删除rep1的字符*/
for(i=a-1;i<rep2->n;++i) str=insert(i,rep2->c[i+1-a],str);/*依次插入rep2中的元素*/
}
return str;
}
pseqstring revocation(pseqstring str,plinkstack opr){
pnode temp;
if(opr==NULL) {
printf("已撤销所有操作\n");
return str;
}
temp=opr->top;/*如果栈不为空,弹出栈顶元素*/
opr->top=opr->top->link;
free(temp);
return (opr->top->str);
}
int main(){
int oper,m,i;
char c;
pseqstring str,rep1,rep2,match;
plinkstack opr;
opr=(plinkstack)malloc(sizeof(struct linkstack));
if(opr==NULL){
printf("out of space\n");
return -1;
}
opr->top=NULL;
while(TRUE){
printf("请选择需要执行的操作:\n");
printf("1.输入 2.输出 3.插入 4.删除 5.查找 6.替换 7.撤消 8.结束程序\n");
scanf("%d",&oper);
if(oper==1){
str=getstring();
output(str);
pushlink(opr,str);
}
if(oper==2){
output(str);
}
if(oper==3){
printf("请输入要插入的字符:\n");
if((scanf("%c",&c))!=1) printf("输入有误,插入失败\n");
printf("请输入插入位置(在第几个字符后就输几):\n");
if((scanf("%d",&i))!=1) printf("输入有误,插入失败\n");
str=insert(i,c,str);
output(str);
pushlink(opr,str);
}
if(oper==4){
printf("请输入要删除元素的下标");
if((scanf("%d",&i))!=1)
printf("输入有误,删除失败\n");
str=del(i,str);
output(str);
pushlink(opr,str);
}
if(oper==5){
printf("请输入要匹配的字符串\n");
match=getstring();
if(match==NULL) printf("failed!\n");
else
printf("found!初始元素下标为%d",search(str,match));
}
if(oper==6){
printf("请输入要替换部分:\n");
rep1=getstring();
printf("要将其替换成:\n");
rep2=getstring();
str=replace(rep1,rep2,str);
output(str);
pushlink(opr,str);
}
if(oper==7){
str=revocation(str,opr);
output(str);
}
if(oper==8)
return 0;
}
}
[[it] 本帖最后由 voyagevio 于 2008-10-25 20:47 编辑 [/it]]