顺序串的各种基本运算的算法

领会顺序串存储结构和顺序串中各种基本运算算法设计

结构体 声明顺序串类型

typedef struct {
	char data[100];//串中字符
	int length;//串长
}Sqstring;

创建顺序串

strassign(Sqstring& s, char str[]):由串常量str创建顺序串s

void strassign(Sqstring& s, char str[]) {//由常量串创建顺序串
	for ( int i = 0; i < str[i]!='\0'; i++) {
		s.data[i] = str[i];
		s.length = i;
	}
}

销毁串

void destroystr(Sqstring& s){}//销毁串

复制串

将顺序串t复制到串s

void strcopy(Sqstring& s, Sqstring t) {//串复制
	for (int i = 0; i < t.length; i++) {
		s.data[i] = t.data[i];
	}
	s.length = t.length;
}

判相等

判断两个顺序串s和t是否相等

void strequal(Sqstring s, Sqstring t) {//判断串相等
	if ( s.length != t.length ) {
		printf("两串不相同\n");
	}
	else {
		for (int i = 0; i < t.length; i++) {
			if (s.data[i] != t.data[i]) {
				printf("两串不相同\n");
				break;
			}
		}
		printf("两串相同\n");
	}
}

求串长度

void strlength(Sqstring s) {//求串长度
	printf("串的长度为%d\n", s.length);
}

串连接

返回将顺序串t连接到顺序串s之后构成的新串

Sqstring concat(Sqstring s, Sqstring t) {//串连接
	Sqstring str;
	int i;
	str.length = s.length + t.length;
	for ( i = 0; i < s.length; i++) {
		str.data[i] = s.data[i];
	}
	for ( i = 0; i < t.length; i++) {
		str.data[s.length + i] = t.data[i];
	}
	return str;
}

求子串

返回顺序串s中第i个字符开始的j个字符构成的新串

Sqstring substr(Sqstring s, int i, int j) {//求子串
	Sqstring str;
	int k;
	str.length = 0;
	if (i <= 0 || i > s.length || j < 0 || i + j - 1 > s.length ) {
		return str;//参数不正确时返回空串
	}
	for ( k = i-1; k < i+j-1; k++) {
		str.data[k - i + 1] = s.data[k];
	}
	str.length = j;
	return str;
}

插入子串

返回将顺序串s2插入到顺序串s1中的第i个位置构成的新串

Sqstring insterstr(Sqstring s1, int i, Sqstring s2) {//插入子串
	int j;
	Sqstring str;
	if ( i <= 0 || i > s1.length + 1 ) {
		return str;//参数不正确时返回空串
	}
	for ( j = 0; j < i - 1; j++) {
		str.data[j] = s1.data[j];
	}
	for ( j = 0; j < s2.length; j++) {
		str.data[i + j - 1] = s2.data[j];
	}
	for ( j = i - 1; j < s1.length; j++) {
		str.data[s2.length + j] = s1.data[j];
	}
	str.length = s1.length + s2.length;
	return str;
}

删除子串

返回删除顺序串s中的第i个字符开始的j个字符构成的新串

Sqstring deletestr(Sqstring s, int i, int j) {//删除子串
	int k; Sqstring str;
	str.length = 0;
	if ( i <= 0 || i >s.length || i + j > s.length + 1 ) {
		return str;//参数不正确时返回空串
	}
	for ( k = 0; k < i-1; k++) {
		str.data[k] = s.data[k];
	}
	for ( k = i + j -1; k < s.length; k++) {
		str.data[k - j] = s.data[k];
	}
	str.length = s.length - j;
	return str;
}

替换子串

返回将顺序串s的第i个字符开始的j个字符替换成顺序串t构成的新串

Sqstring repstr(Sqstring s, int i, int j, Sqstring t) {//替换子串
	int k; Sqstring str;
	str.length = 0;
	if (i <= 0 || i > s.length || i + j - 1 > s.length) {
		return str;
	}
	for ( k = 0; k < i - 1; k++) {
		str.data[k] = s.data[k];
	}
	for ( k = 0; k < t.length; k++) {
		str.data[i + k - 1] = t.data[k];
	}
	for ( k = i+k-1; k < s.length; k++) {
		str.data[t.length + k - j] = s.data[k];
	}
	str.length = s.length - j + t.length;
	return str;
}

输出子串

void showstr(Sqstring s) {//输出子串
	if (s.length>0) {
		for (int i = 0; i < s.length; i++) {
			printf("%c ", s.data[i]);
		}
		printf("\n");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43349548/article/details/106768467