在链串S中,将第i个字符开始的j个字符构成的子串用串t替换,并产生新产生的串

本文介绍了一种使用链表实现字符串操作的方法,包括创建链表、打印链表、计算链表长度,以及如何将一个链表的指定子串替换为另一个链表表示的字符串。通过具体的代码示例,展示了链表作为数据结构在字符串处理中的应用。
摘要由CSDN通过智能技术生成

```cpp
#include<iostream>
#include<stdio.h>
using namespace std;
    typedef class bunch
        {
            public:
                char a;
                bunch *next;
        }*LinkBunch,Link;
     void creat_LinkBunch(LinkBunch &L,char t[]);
     int StrLength(LinkBunch &L);
     LinkBunch RepStr(LinkBunch &L1,int i,int j,LinkBunch &L2);//将L2插入到L1的i个位置开始连续j个字符构成的子串
     void printlist(LinkBunch &L);
    int main()
        {
            int i,j;
            char a[30];
            gets(a);
            LinkBunch t1,t2;
            creat_LinkBunch(t1,a);
            printlist(t1);
            gets(a);
            creat_LinkBunch(t2,a);
            printlist(t2);
            cout<<"从第几个位置开始"<<endl;
            cin>>i;
            cout<<"连续几个位置"<<endl;
            cin>>j;
            LinkBunch t=RepStr(t1,i,j,t2);
            printlist(t);

        }

    void creat_LinkBunch(LinkBunch &L,char t[])//ok
        {
            L=new Link;
            L->next=NULL;
            LinkBunch s,rear;
            rear=L;
            int i=0;
            while(t[i]!='\0')
            {
                s=new Link;
                s->a=t[i];
                s->next=rear->next;
                rear->next=s;
                rear=s;
                i++;
            }
            rear->next=NULL;
        }






        void printlist(LinkBunch &L)
                {
                    LinkBunch p=L->next;
                    if(p==NULL)
                    {
                        return ;
                    }
                    else
                    {
                        while(p!=NULL)
                        {
                            cout<<p->a;
                            p=p->next;
                        }
                    }

                    cout<<endl;
                }

    int StrLength(LinkBunch &L)
        {
            LinkBunch p=L->next;
            int i=0;
            while(p!=NULL)
            {
                i++;
                p=p->next;
            }
            return i;
        }


        LinkBunch RepStr(LinkBunch &L1,int i,int j,LinkBunch &L2)//将L2插入到L1的i个位置开始连续j个字符构成的子串

                {
                    int k=1;
                    LinkBunch L=new Link;
                    L->next=NULL;
                    LinkBunch p=L1->next,q=L2->next;
                    LinkBunch rear=L;
                    LinkBunch s;
                    if(i>StrLength(L1)+1||i<1||i+j>StrLength(L1)||j<1)

                        {
                            return L;
                        }

                    while(k<i)
                    {
                        s=new Link;
                        s->a=p->a;
                        s->next=rear->next;
                        rear->next=s;
                        rear=s;
                        p=p->next;
                        k++;
                    }
                    k=1;
                    while(k<=j)
                    {
                        p=p->next;
                        k++;
                    }
                    while(q!=NULL)
                    {
                        s=new Link;
                        s->a=q->a;
                        s->next=rear->next;
                        rear->next=s;
                        rear=s;
                        q=q->next;
                    }
                    while(p!=NULL)
                    {
                        s=new Link;
                        s->a=p->a;
                        s->next=rear->next;
                        rear->next=s;
                        rear=s;
                        p=p->next;
                    }
                    return L;
                }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值