数据结构 - 串实践报告(2)

2025-08-28

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

return i-T[0]; else

return 0; } else

return 0; }

Status StrInsert(SString S,int pos,SString T) {

// 初始条件: 串S和T存在,1≤pos≤StrLength(S)+1

// 操作结果: 在串S的第pos个字符之前插入串T。完全插入返回TRUE,部分插入返回FALSE int i;

if(pos<1||pos>S[0]+1) return ERROR;

if(S[0]+T[0]<=MAXSTRLEN) {

///完全插入

for(i=S[0]; i>=pos; i--) S[i+T[0]]=S[i];

for(i=pos; i

///部分插入

for(i=MAXSTRLEN; i<=pos; i--) S[i]=S[i-T[0]];

for(i=pos; i

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; }

Status Replace(SString S,SString T,SString V) {

// 初始条件: 串S,T和V存在,T是非空串(此函数与串的存储结构无关) // 操作结果: 用V替换主串S中出现的所有与T相等的不重叠的子串 int i=1; // 从串S的第一个字符起查找串T if(StrEmpty(T)) // T是空串 return ERROR; do {

i=Index(S,T,i); // 结果i为从上一个i之后找到的子串T的位置 if(i) // 串S中存在串T {

StrDelete(S,i,StrLength(T)); // 删除该串T StrInsert(S,i,V); // 在原串T的位置插入串V

i+=StrLength(V); // 在插入的串V后面继续查找串T } }

while(i); return OK; }

void DestroyString() {

// 由于SString是定长类型,无法销毁 }

void StrPrint(SString T) {

// 输出字符串T。另加 int i;

for(i=1; i<=T[0]; i++) printf(\ printf(\// printf(\}

int main() {

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

char g='1'; int i,j; Status k;

char s,c[MAXSTRLEN+1]; SString t,s1,s2;

printf(\请输入串s1: \ gets(c);

k=StrAssign(s1,c); if(!k) {

printf(\串长超过MAXSTRLEN(=%d)\\n\ exit(0); }

printf(\串长为%d 串空否?%d(1:是 0:否)\\n\ StrCopy(s2,s1);

printf(\拷贝s1生成的串为: \ StrPrint(s2);

printf(\请输入串s2: \ gets(c);

k=StrAssign(s2,c); if(!k) {

printf(\串长超过MAXSTRLEN(%d)\\n\ exit(0); }

i=StrCompare(s1,s2); if(i<0) s='<'; else if(i==0) s='='; else

s='>';

printf(\串s1%c串s2\\n\ k=Concat(t,s1,s2);

printf(\串s1联接串s2得到的串t为: \ StrPrint(t); if(k==FALSE)

printf(\串t有截断\\n\ ClearString(s1);

printf(\清为空串后,串s1为: \ StrPrint(s1);

printf(\串长为%d 串空否?%d(1:是 0:否)\\n\ printf(\求串t的子串,请输入子串的起始位置,子串长度: \ scanf(\ k=SubString(s2,t,i,j);

哈尔滨理工大学计算机科学与技术学院实验教学中心 实验报告

if(k) {

printf(\子串s2为: \ StrPrint(s2); }

printf(\从串t的第pos个字符起,删除len个字符,请输入pos,len: \ scanf(\ StrDelete(t,i,j);

printf(\删除后的串t为: \ StrPrint(t);

i=StrLength(s2)/2; StrInsert(s2,i,t);

printf(\在串s2的第%d个字符之前插入串t后,串s2为:\\n\ StrPrint(s2); i=Index(s2,t,1);

printf(\的第%d个字母起和t第一次匹配\\n\ SubString(t,s2,1,1); printf(\串t为:\ StrPrint(t); Concat(s1,t,t);

printf(\串s1为:\ StrPrint(s1); Replace(s2,t,s1);

printf(\用串s1取代串s2中和串t相同的不重叠的串后,串s2为: \ StrPrint(s2);

while(g!='0')scanf(\}

// main4-1.cpp 检验bo4-1.cpp的主程序 // c1.h (程序名) #include #include

#include // malloc()等 #include // INT_MAX等

#include // EOF(=^Z或F6),NULL #include // atoi() #include // eof()

#include // floor(),ceil(),abs() #include // exit()

// #include // cout,cin // 函数结果状态代码 #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 30 // 用户可在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 StrCopy(SString T,SString S) {

/// 由串S复制得串T int i;

for(i=0; i<=S[0]; i++) T[i]=S[i]; return OK; }

Status StrEmpty(SString S) {

/// 若S为空串,则返回TRUE,否则返回FALSE if(S[0]==0)

return TRUE; else

return FALSE; }

int StrCompare(SString S,SString T)


数据结构 - 串实践报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:我的春节作文600字

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219