C++描述的串的操作

#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);
}
这里面有一个逻辑错误,请问是否能帮忙解决一下。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值