严蔚敏《数据结构》——顺序串

顺序串,就是一个数组!!!

串的存储结构

#include<cstdio>
#include<cstdlib>

#define Status char
#define MAXSTRLEN 255     //用户可在255以内定义最大串长
#define TRUE 0
#define FALSE 1
#define OK 0
#define ERROR 1
typedef unsigned char SString[MAXSTRLEN + 1];//0号单元存放串的长度
//将串S1和S2合并成T

将串S1和串S2合并成新的串T

此时

如果S1的长度与S2的长度相加小于或等于T的长度,则不需要截断,即S1+S2=T

如果S1+S2的长度大于T的长度,则需“截断”例如sizeof(T)=5,S1={3,1,2,3},S2={4,4,5,6,7}那么T={4,1,2,3,4}(S1[0],S2[0]的值为当前串的长度)

如果T的长度和S1的长度相等,那么T=S1。

Status Concat(SString& T, SString S1, SString S2) {
	char uncut;
	S1[0] = sizeof(S1);
	S2[0]=sizeof(S2);
	int length = S1[0] + S2[0];
	if (S1[0] + S2[0] <= MAXSTRLEN) {      //未截断
		T[0] = S1[0] + S2[0];
		for (int i = 1; i < S1[0]; i++) {
			T[i] = S1[i];
		}
		for (int j = S1[0] + 1; j <= length; j++) {
			int k = 1;
			T[j] = S2[k];
			k++;
		}
		printf("未截断!!\n");
		uncut = TRUE;
	}
	else if (S1[0] < MAXSTRLEN) {        //从S2当中某一位置截断
		for (int i = 1; i < S1[0]; i++) {
			T[i] = S1[i];
		}
		for (int j = S1[0] + 1; j <= MAXSTRLEN; j++) {
			int k = 1;
			T[j] = S2[k];
			k++;
		}
		T[0] = MAXSTRLEN;
		printf("在S2中截断!!\n");
		uncut = FALSE;
	}
	else {
		for (int i = 1; i < S1[0]; i++) {
			T[i] = S1[i];
		}
		T[0] = S1[0];
		uncut = FALSE;
	}
}

从S中取子串从第pos的位置起长度为len

Status SunString(SString& Sub, SString S, int pos, int len) {
	if (pos<1 || pos>S[0] || len<0 || len>S[0] - pos + 1) {
		return ERROR;
	}
	for (int i = 1; i < len; i++) {
		Sub[i] = S[pos];
		pos++;
	}
	Sub[0] = len;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷傲|奈我何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值