数据结构实验六 串

实验六 串

1、实验目的:
(1)掌握串的概念。
(2)理解串的存储结构。
(3)能够基于串的相应存储结构实现串的常用操作。
2、实验环境与设备:
已安装Visual Studio 2010(或其以上版本)集成开发环境的计算机。
3、实验原理:
(1)串的定长顺序存储结构。
(2)串的常用操作实现。
4、实验内容:
基于串的定长顺序存储结构实现串的常用操作,并举例演示。

// 预定义常量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

// 预定义类型
typedef int Status;

// 本程序定义常量,串的最大长度为255
#define MAXSTRLEN 255

// 本程序定义类型,定长顺序存储的串,0号位置存储串长。
typedef unsigned char SString[ MAXSTRLEN + 1];

//串的初始化操作,用字符数组chars初始化串T
Status StrAssign( SString T, char *chars )
//串的求长度操作
int StrLength( SString S )
//串的比较操作,若S>T,则返回1;若S=T,则返回0;若S<T,则返回-1
int StrCompare( SString S, SString T )
//串的清空操作,将得到空串
Status ClearString( SString S)
//串2联接到串1之后,得到新串T
Status Concat( SString T, SString S1, SString S2 )
//串的打印操作
void PrintString( SString S )

5、实验考核:
(1)完成纸质版实验报告
(2)提交电子版作业

6、执行结果示例如下:
在这里插入图片描述
来了来了

#include<stdio.h>
#include<string.h>
// 预定义常量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
// 预定义类型
typedef int Status;
// 本程序定义常量,串的最大长度为255
#define MAXSTRLEN 255

// 本程序定义类型,定长顺序存储的串,0号位置存储串长。
typedef unsigned char SString[MAXSTRLEN + 1];

//串的初始化操作,用字符数组chars初始化串T
Status StrAssign(SString T, char *chars){
	int len = strlen(chars);
	if (len>MAXSTRLEN)
	{
		return ERROR;
	}
	else
	{
		T[0] = len;
		for (int i = 1; i <= len; i++)
		{
			T[i] = chars[i - 1];
		}
		return OK;
	}
}
//串的求长度操作
int StrLength(SString S){
	return S[0];
}
//串的比较操作,若S>T,则返回1;若S=T,则返回0;若S<T,则返回-1
int StrCompare(SString S, SString T){
	if (S[0]==T[0])
	{
		for (int i = 1; i <=S[0]; i++)
		{
			if (S[i] == T[i])
			{
				continue;
			}
			else
			{
				return S[i]>T[i] ? 1 : -1;
			}
		}
		return 0;
	}
	return S[0] > T[0] ? 1 : -1;
}
//串的清空操作,将得到空串
Status ClearString(SString S){
	S[0] = 0;
}
//串2联接到串1之后,得到新串T
Status Concat(SString T, SString S1, SString S2){
	int i;
	for (i = 1; i <= S1[0]; i++)
	{
		T[i] = S1[i];
	}
	if (S1[0]+S2[0]<=MAXSTRLEN)
	{
		for (i = 1; i <=S2[0]; i++)
		{
			T[S1[0] + i] = S2[i];
		}
		T[0] = S1[0] + S2[0];
		return OK;
	}
	else
	{
		for (i = 1; S1[0] + i < MAXSTRLEN; i++)
		{
			T[S1[0] + i] = S2[i];
		}
		T[0] = MAXSTRLEN;
		return ERROR;
	}
}
//串的打印操作
void PrintString(SString S){
	if (S[0]>0)
	{
		for (int i = 0; i < S[0]; i++)
		{
			printf("%c", S[i+1]);
		}
	}
	else
	{
		printf("这个是空串");
	}
	printf("\n");
}

int main(){
	SString S1, S2, S3;
	char s1[MAXSTRLEN], s2[MAXSTRLEN];
	printf("请输入第一个字符串:");
	gets_s(s1, MAXSTRLEN);
	printf("请输入第二个字符串:");
	gets_s(s2, MAXSTRLEN);
	StrAssign(S1, s1); StrAssign(S2, s2);
	printf("赋值后第一个字符串是:\n"); PrintString(S1);printf("\n");
	printf("赋值后第二个字符串是:\n"); PrintString(S2);printf("\n");
	printf("*********************************************\n");
	switch (StrCompare(S1,S2))
	{
	case 0:
		printf("第一个字符串和第二个字符串相等\n");
		break;
	case 1:
		printf("第一个字符串比第二个字符串大\n");
		break;
	case -1:
		printf("第一个字符串比第二个字符串小\n");
		break;
	}
	printf("*********************************************\n");
	if (Concat(S3,S1,S2))
	{
		printf("这两个字符串连接后形成的字符串是:\n");
		PrintString(S3);
		printf("连接后的长度为:%d\n",S3[0]);
	}
	else
	{
		printf("连接失败");
	}
	printf("*********************************************\n");
	printf("清空字符串S3\n");
	ClearString(S3);
	printf("清空后,S3的长度为:%d\n", S3[0]);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

发布了15 篇原创文章 · 获赞 0 · 访问量 240

猜你喜欢

转载自blog.csdn.net/qq_44796882/article/details/105464711