顺序串的算法

#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
const int Max=50;
    typedef class bunch
        {
        public:
            char a[Max];
            int length;

        }sqString;
         void creat(sqString &str,char t[]); //创建串
         sqString del_bunch(sqString str,int i,int j);
         void Strcpy_bunch(sqString &str,sqString p);//串的复制;
         sqString connect_bunch(sqString &str1,sqString str2);//将 str2的串链接到str1的后面
         sqString Link_bunch(sqString str,int i,int j);//返回str中从第i个字符开始,连续j个字符组成的子串;
         sqString insert_bunch(sqString str1,sqString str2,int i);//将str2 插入到str1中的第i个位置上;
         sqString del_bunch(sqString str,int i,int j);//删除str从i开始长度为j的字串,并返回这个删除后的子串s
         void printlist(sqString str);

    int main()
        {
            char a[30];
            gets(a);
            sqString str1;
            sqString str2;
            /*creat(str1,a);
            gets(a);
            creat(str2,a);
            printlist(str1);
            printlist(str2);
            connect_bunch(str1,str2);
            printlist(str1);*/
            /*creat(str1,a);
            printlist(str1);
            Strcpy_bunch(str2,str1);
            printlist(str2);*/
            int i,j;
            creat(str1,a);
            gets(a);
            creat(str2,a);
            printlist(str1);
            printlist(str2);
            cout<<"从第几个字符开始"<<endl;
            cin>>i;
            //cout<<"几个字符?"<<endl;
            //cin>>j;
            //str2=Link_bunch(str1,i,j);
            //str2=del_bunch(str1,i,j);
            sqString str=insert_bunch(str1,str2,i);
            printlist(str);
            return 0;
        }

    void creat(sqString &str,char t[]) //创建串
        {
            int i=0;
            while(t[i]!='\0')
            {
                str.a[i]=t[i];
                i++;
            }
            str.length=i;
        }

    void Strcpy_bunch(sqString &str,sqString p)//串的复制
        {
            int i=0;
            while(i<p.length)
            {
                str.a[i]=p.a[i];
                i++;
            }
            str.length=p.length;
        }


    sqString connect_bunch(sqString &str1,sqString str2)//将 str2的串链接到str1的后面
            {
                int i=str1.length;
                int j=0;
                while(j<str2.length)
                {
                    str1.a[i]=str2.a[j];
                    j++;
                    i++;
                }
                str1.length=i;
                return str1;
            }


    sqString Link_bunch(sqString str,int i,int j)//返回str中从第i个字符开始,连续j个字符组成的子串
        {
            sqString p;
            int k=0;
            if(i<0||i>str.length||i+j>str.length+1)
                {
                    return p;
                }

            else
            {

               int temp=i+j-2;
               i--;
               while(i<=temp)
               {
                   p.a[k]=str.a[i];
                   i++;
                   k++;
               }
               p.length=k;

            }

            return p;
        }

        sqString insert_bunch(sqString str1,sqString str2,int i)//将str2 插入到str1中的第i个位置上
            {
                sqString str;
                if(i<0||i>str1.length+1)
                {
                    return str;
                }

                int j=0;
                while(j<=i-2)
                {
                    str.a[j]=str1.a[j];
                    j++;
                }
                int k=0;
                while(k<=str2.length-1)
                {
                    str.a[j]=str2.a[k];
                    k++;
                    j++;

                }
                i=i-1;
                while(i<=str1.length-1)
                {
                    str.a[j]=str1.a[i];
                    j++;
                    i++;
                }
                str.length=j;
                return str;

            }

            sqString del_bunch(sqString str,int i,int j)//删除str从i开始长度为j的字串,并返回这个删除后的子串s
                {
                        sqString t;
                        if(i<=0||i>str.length||i+j>str.length+1)

                            {
                                return t ;
                            }

                            int k=0;

                            while(k<=i-2)
                            {
                                t.a[k]=str.a[k];
                                k++;
                            }
                            int n=i+j-1;
                            while(n<=str.length-1)
                            {
                                t.a[k]=str.a[n];
                                n++;
                                k++;
                            }
                            t.length=k;
                            return t;


                }

            void printlist(sqString str)
                {
                    int i=0;
                    while(i<=str.length-1)
                    {
                        cout<<str.a[i];
                        i++;
                    }
                    cout<<endl;
                }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值