#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<fstream.h>
#include<strstrea.h>
#include<malloc.h>
typedef struct node{//节点定义
char data;
struct node *next;
}linkstring;
void assign(linkstring *&s,int t[]){//数组赋给串、
int i=0;
linkstring *q,*tc;
s=(linkstring*)malloc(sizeof(linkstring));
s->next=NULL;
tc=s;
while(t[i]!='/0')
{ q=(linkstring*)malloc(sizeof(linkstring));
q->data=t[i];
tc->next=q;
tc=q;
i++;
}
tc->next=NULL;
}
void strcopy(linkstring *&s,linkstring *t){//串复制
linkstring *p=t->next,*tc,*q;
s=(linkstring*)malloc(sizeof(linkstring));
s->next=NULL;
tc=s;
while(p!=NULL){
q=(linkstring*)malloc(sizeof(linkstring));
q->data=p->data;
tc->next=q;
tc=q;
p=p->next;
}
tc->next=NULL;
}
int strlength(linkstring *s){//求串长
int i=0;
linkstring *p=s->next;
while(p!=NULL){
p=p->next;
i++;
}
cout<<i<<endl;
return i;
}
int strequal(linkstring *s,linkstring *t){//判断串相等
linkstring *p=s->next, *q=t->next;
while(p!=NULL&&q!=NULL){
if(p->data!=q->data)
return 0;
p=p->next;q=q->next;
}
if(p!=NULL||q!=NULL)
return 0;
return 1;
}
linkstring *concot(linkstring *s,linkstring *t){//连接两个子串
linkstring *p=s->next,*q,*tc,*r;
r=(linkstring*)malloc(sizeof(linkstring));
r->next=NULL;
tc=r;
while(p!=NULL){
//tc->next=p;
//tc=p;
q=(linkstring*)malloc(sizeof(linkstring));
q->data=p->data;
tc->next=q;
tc=q;
p=p->next;
}
p=t->next;
while(p!=NULL){
q=(linkstring*)malloc(sizeof(linkstring));
q->data=p->data;
tc->next=q;
tc=q;
p=p->next;
}
tc->next=NULL;
return(r);
}
linkstring *substar(linkstring *s,int i,int j){//返回第i个位置后的j个指针
int k=1;
linkstring *p=s->next,*q,*tc,*r;
r=(linkstring*)malloc(sizeof(linkstring));
r->next=NULL;
tc=r;
while(k<i,&p!=NULL){
p=p->next;
k++;
}
if(p!=NULL){
k=1;
while(k<j&&p!=NULL){
q=(linkstring*)malloc(sizeof(linkstring));
q->data=p->data;
tc->next=q;
tc=q;
p=p->next;
k++;
}
tc->next=NULL;
}
return r;
}
int findstring(linkstring *s,linkstring *t){//返回子串在主串中的位置
linkstring *p=s->next,*p1,*q,*q1;
int i=0;
while(p!=NULL)
{q=t->next;
if(q->data==p->data)
{p1=p->next;q1=q->next;
while(p1!=NULL&&q1!=NULL&&q1->data==p1->data){
p1=p1->next;
q1=q1->next;}
if(q1==NULL)
return (i);
}
p=p->next;
i++;
}
return(-1);
}
void showlist(linkstring *s){//输出数组
linkstring *p=s->next;
while(p!=NULL)
{cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void main(){
linkstring *s1,*s2;
s1=(linkstring*)malloc(sizeof(linkstring));
s2=(linkstring*)malloc(sizeof(linkstring));
int t1[]={5,7,8,9,2,4,1,2,3,4,5,6};
int t2[]={9,2,4,1};
assign(s1,t1);
assign(s2,t2);
showlist(s1);
showlist(s2);
strlength(s1);
strlength(s2);
findstring(s1,s2);
substar(s1,4,3);
}
这里面有一个逻辑错误,请问是否能帮忙解决一下。
C++描述的串的操作
最新推荐文章于 2022-08-11 21:40:20 发布