串操作练习

21 篇文章 0 订阅
20 篇文章 2 订阅

Description
已知三个字符串分别为s="ababababcaabcbcaaaaaa",s1="caab", s2="bcb"。利用所学定长顺序存储结构的串操作得到结果串为:s3="caabcbcaaaaaacaaaaaa"。

Input

Output
输出为一行(caabcbcaaaaaacaaaaaa)。

Sample Output
caabcbcaaaaaacaaaaaa

//串操作练习
#include <bits/stdc++.h>
 using namespace std;

 // 函数结果状态代码
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 // #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
 typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE

 // c4-1.h 串的定长顺序存储表示
 #define MAXSTRLEN 255 // 用户可在255以内定义最大串长(1个字节)
 typedef char SString[MAXSTRLEN+1]; // 0号单元存放串的长度

  // bo4-1.cpp 串采用定长顺序存储结构(由c4-1.h定义)的基本操作(14个)
 // SString是数组,故不需引用类型。此基本操作包括算法4.2,4.3,4.5
 Status StrAssign(SString T,char *chars)
 { // 生成一个其值等于chars的串T
   int i;
   if(strlen(chars)>MAXSTRLEN)
     return ERROR;
   else
   {
     T[0]=strlen(chars);
     for(i=1;i<=T[0];i++)
       T[i]=*(chars+i-1);
     return OK;
   }
 }

Status Concat(SString T,SString S1,SString S2) // 算法4.2改
 { // 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE
   int i;
   if(S1[0]+S2[0]<=MAXSTRLEN)
   { // 未截断
     for(i=1;i<=S1[0];i++)
       T[i]=S1[i];
     for(i=1;i<=S2[0];i++)
       T[S1[0]+i]=S2[i];
     T[0]=S1[0]+S2[0];
     return TRUE;
   }
   else
   { // 截断S2
     for(i=1;i<=S1[0];i++)
       T[i]=S1[i];
     for(i=1;i<=MAXSTRLEN-S1[0];i++)
       T[S1[0]+i]=S2[i];
     T[0]=MAXSTRLEN;
     return FALSE;
   }
 }

 Status StrDelete(SString S,int pos,int len)
 { // 初始条件: 串S存在,1≤pos≤StrLength(S)-len+1
   // 操作结果: 从串S中删除第pos个字符起长度为len的子串
   int i;
   if(pos<1||pos>S[0]-len+1||len<0)
     return ERROR;
   for(i=pos+len;i<=S[0];i++)
     S[i-len]=S[i];
   S[0]-=len;
   return OK;
 }

 void StrPrint(SString T)
 { // 输出字符串T。另加
   int i;
   for(i=1;i<=T[0];i++)
     printf("%c",T[i]);
   //printf("\n");
 }

 int main()
 {
    SString s,s1,s2,s3;
    StrAssign(s,"ababababcaabcbcaaaaaa");
    StrAssign(s1,"caab");
    StrAssign(s2,"bcb");
    Concat(s3,s1,s2);
    StrDelete(s3,4,1);
    StrDelete(s,1,14);
    Concat(s,s,s);
    Concat(s3,s3,s);
    StrPrint(s3);
 }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值