数据结构串的静态存储结构的源码实现

本文详细介绍了串操作的实现方法,包括静态数组和动态数组的存储结构、初始化、插入、删除和取子串等操作。通过实例代码演示了如何进行串的插入、删除和取子串操作,并提供了关键步骤的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作实现效果图:


代码:

//串的静态存储结构

/**
静态数组存储结构
typedef struct{
      char str[MaxSize];
      int length;
}String;
*/


/**
动态的数组存储结构
typedef struct{
      char *str;  //表示动态数组的名 
      int MaxLength;//表示动态数组元素的最大个数
 int length ;//表示当前的动态数组的当前长度 
}DString;
*/



/**
*定义一个静态数组结构体 
*/
#include <iostream>
#define MaxSize 100
using namespace std; 
 
typedef struct {
      char str[MaxSize];
      int  length;
}String;


/**
*初始化操作
*/
void Initiate(String *s){
      s->length = 0;
} 
/**
*插入操作
*在S的i的位置下插入字串T 
*/


int Insert(String *s,int i,String T){
       //cout<<"length1.................."<<T.length<<endl; 
       if(i <0 ||i> s->length){
             cout<<"参数出错哦!"<<endl;
             return 0; 
       }else if(s->length + T.length >MaxSize){
             cout<<"数组空间不足,无法插入!"<<endl;
       }else{
            /**
 *将原串向后移位
 */ 
             for(int j = s->length-1;j >=i;j--){
                     s->str[j + T.length] = s->str[j];
             }
             /**
 *插入新的串T
 */ 
             for(int j = 0; j < T.length;j++){
                  s->str[i +j] = T.str[j];
             }
             s->length= s->length+ T.length;//产生新的串长度 
            // cout<<"length2..................."<<s->length<<endl;
           /*  int count = 0;
             for(int  i = 0;i <s->length ;i++){
             cout<<s->str[i];
             count++;
          } 
          cout<<"长度"<<count<<endl; 
             cout<<endl;*/
             cout<<"插入成功!"<<endl;
             return 1;
       } 
} 


/**
*
*删除串的操作
*删除串s从位置pos到后的长度的子串值 
*/


int Delete(String *s,int pos ,int len){
//cout<<"length2.................."<<s->length<<endl;
cout<<"删除过程中....."<<endl;
       if(s->length<= 0){
            cout<<"数组中无字符串可以删除!"<<endl;
       }else if(pos <0 || len <0 || pos + len > s->length){
            cout<<"参数pos或len 不合法!"<<endl;
       }else{
             for(int i = pos + len;i < s->length-1;i++){ 
               s->str[i -len] = s->str[i];
             }
 s->length= s->length - len;
            // cout<<"length2.................."<<s->length<<endl;
            /* int count = 0;
             for(int  i = 0;i <s->length-1 ;i++){
             cout<<s->str[i];
             count++;
          } 
          cout<<"长度"<<count<<endl; 
             cout<<endl;*/
                  return 1;
       }     
} 


/**
*
*取子串操作
*取串从pos开始的len长度的串给T 
*/


int SubString(String *s,int pos ,int len,String *T){
         if(pos < 0|| pos+ len >s->length|| len <0){
             cout<<"参数pos或len有错误!"<<endl;
             return 0; 
         }else{
                for(int i = 0 ;i <len;i++){
                T->str[i] = s->str[pos +i]; 
                }
                T->length = len ;
                return 1;
         }

} 


int main(){
 /**
 *初始化串
 */
 
 int count = 0;
 String *p;
 Initiate(p);
 char str1[100] = "Hello world!";
 int length1 = strlen(str1);
 //cout<<"length1<<<<<<<<<<<<<<<<<<<<<<<"<<length1<<endl;
 char str2[20] = "I Love You!";
 int length2 = strlen(str2);
 //cout<<"length2<<<<<<<<<<<<<<<<<<<<<<<"<<length2<<endl;
 String myString1 = {"I Love You",length1},myString2 = {"All world!",length2};
 cout<<"初始化的长度"<<p->length<<endl; 
 cout<<"插入操作,将str1插入str2中,从0位置开始:"<<endl;
 Insert(&myString2,0,myString1); 
 cout<<"长度:"<<myString1.length<<"\t"<<myString2.length<<endl; 
 for(int i = 0;i <myString2.length;i++){
   cout<<myString2.str[i];
   count++;
   }
   cout<<endl;
   cout<<"长度:"<<count<<"\t"<<myString2.length<<endl; 
   cout<<endl;
   
   cout<<"删除:"<<endl;
   Delete(&myString2,16 ,2);
   count = 0;
   cout<<"删除后的字符串:"<<endl;
   for(int i = 0;i <myString2.length-1;i++){
   cout<<myString2.str[i];
   count++; 
   }
   cout<<endl;
   cout<<"删除后长度:"<<count<<"\t"<<myString2.length<<endl;
   cout<<endl;
   cout<<"取字符串:"<<endl;
   count = 0;
   String *p1;
   p1 = (String *)malloc(sizeof(String));
      SubString(&myString2,5 ,14,p1);
      cout<<"未被获取的字符串是:"<<endl;
   for(int i = 0;i < myString2.length - p1->length-1;i++){
         cout<<myString2.str[i];
   }
 cout<<endl;
 
   cout<<"获取的字符串是:"<<endl; 
      for(int i = 0;i <10;i++){
   cout<<p1->str[i];
   count++; 
   }
   cout<<endl;
   cout<<"满字符串是:"<<endl;
   for(int  i = 0;i < myString2.length-1 ;i++){
       cout<<myString2.str[i];
   } 
   cout<<endl;
   cout<<"所取字符串长度:"<<count<<"主串的长度:"<<myString2.length<<endl;
   
      return 0;
}

代码仅供初学者学习,自己也是菜鸟,希望有助于一起学习。






 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值