数据结构串的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息工程大学数据结构实验(实习)报告

实验(实习)名称串的应用实验(实习)日期 2015-11-2 得分指导教师顾韵华

系计软院专业计科年级 2014级班次 2

一、实验目的

1、掌握串的用法。

二、实验容

1、设计一个算法,删去串s中从第i个字符开始的连续j个字符(以堆分配法表示串)。

2、若x和y是两个以堆分配法表示的串,请设计一个算法,找出x中第一个不在y中出现的字符。3.一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:

则字符串'encrypt'被加密为'tkzwsdf'。

(1) 写一算法将输入的文本串进行加密后输出;

(2) 写一算法,将输入的已加密文本串进行解密后输出。

4、实现朴素的模式匹配算法。

三、

//设计一个算法,删去串s中从第i个字符开始的连续j个字符(以堆分配法表示串)。

#include

#include

#include

#define OK 1

#define ERROR 0

typedef int Status;

typedef struct{ //堆分配法表示串的类型定义

char *ch; //存储区基址

int length; //串长

} HString;

Status strAssign(HString &S,char *chars)

//生成一个其值等于串常量chars的串S

{

int i,j;

char *c;

if (S.ch) free(S.ch);

for (i=0,c=chars;*c!='\0';i++,c++); //求串chars的长度,存于i

if (!i) //chars为空串

{ S.ch=NULL; S.length=0; }

else

{ if (!(S.ch=(char *) malloc(i*sizeof(char)))) return ERROR;

for(j=0;j

S.length=i;

}

return OK;

}

Status strDelete(HString &S,int i,int j)

//删除串S中从i开始的j个字符,串采用堆分配法存储

{

int k,m;

if (i>S.length || i<1)

return ERROR;

for (k=i+j-1,m=i-1;k

S.ch[m]=S.ch[k];

S.ch[m+1]='\0';

S.length=S.length-j;

return OK;

}

void printString(HString S)

{

int i;

for (i=0;i

printf("%c",S.ch[i]);

printf("\n");

}

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main()

{

HString S;

char str[]="This is a test string!";

printf("创建字符串S!\n");

if (strAssign(S,str)==ERROR)

{

printf("创建的字符串S失败!\n");

return 1;

}

printf("创建的字符串S为:");

printString(S);

printf("删除字符串S从3开始的4个字符:\n");

strDelete(S,3,4);

printf("删除字符后的字符串S为:\n");

printString(S);

return 0;

}

2、//若x和y是两个以堆分配法表示的串,请设计一个算法,找出x中第一个不在y中出现的字符

#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -1

typedef int Status;

typedef struct{ //堆分配法表示串的类型定义

char *ch; //存储区基址

int length; //串长

} HString;

Status strAssign(HString &S,char *chars)

{ //生成一个其值等于串常量chars的串T

int i,j;

char *c;

if (S.ch) free(S.ch);

for (i=0,c=chars;*c;i++,c++); //求串chars的长度,存于i if (!i) //ars为空串

{ S.ch=NULL; S.length=0; }

else

{ if (!(S.ch=(char *) malloc(i*sizeof(char))))

exit(OVERFLOW);

for(j=0;j

S.length=i;

}

return OK;

}

void strSearch(HString &S1,HString &S2)

{

int i,j;

for(i=0;i

{

int m=0;

for(j=0;j

{

if(S1.ch[i]==S2.ch[j])

break;

else

相关文档
最新文档