数据结构串的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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