串-数据结构实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
课程名称 数据结构实验 成 绩 实验项目 串 指导教师 学生姓名 学号 班级专业 10电子本 ___ 实验地点 综合楼 实验日期 2012 年11月10日 _ 一、实习目的 1. 熟悉串类型的实现方法,了解简单文字处理的设计方法。 2. 熟悉C语言的字符和把字符串处理的原理和方法。下面简单介绍C 相关知识: (1) 字符: char ch; ch是单个字符变量 ch=’a’; ’a’ 是字符常量 (2)字符串: Char s1[10],*s2,s3[2][10]; S1 是一维字符数组,也称它是字符串变量; S2 是指向字符的指针变量,可以给它分配一批单元存放字符,也称 为串; S2=(char )malloc(sizeof(char)*10); S3 是2行10列的二维字符数组,一般看做含有2个字符串的数组 s3[0],s3[1],每个串最多容10个字符; 下列赋值语句是错误的: S1= “abcdefghi” ; 应该使用串拷贝函数: strcpy(S1, “abcdefghi”); strcoy( S2, ”abcdefghi”); strcpy(S3[0], ”123456789”); strcpy(S3[1], ”jklmnopqr”) ; 用双引号括起来的是字符串常量,在处理字符串常量时,注意总是有 一个字符‘\0’作为字符串常量的结尾 。”123456789”存入S3[0]要占用10 个位置,而不是9个。S3[0][0]里是1,……,s3[0][8]里是9,s3[0][9]里 是‘\0’(串尾标志)。 (3)常见的字符函数: int strlen(streing) string 可以是串变量或常量, 函数结果是串长度(不含‘\0’)。 strcpy( str ,str2 ); str是串变量,str2可以是串变量或常量。函数的作用是将str2的串拷贝
} end_main /* 串的置换,将主串s中的t串,置换为v串 */ void replace(char *s,char *t,char *v) { int i,j,k,po,sl,tl; sl=strlen(s); tl=strlen(t); printf("\n sl=%d tl=%d\n",sl,tl); po=0; while( po< sl-tl+1) { k=index(s,t,po); /* 调用串匹配函数 */ printf("\n k=%2d",k); if(k==-1) break; i=k-1; for(j=0;j<=tl-1;j++) { s[i]=v[j];i++;} po=k+tl; printf(" pos=%2d",po); } } /* replace */ /* 串匹配函数 */ /* 从主串s的第pos个字符开始查找子串t,函数结果是子串t在主 串s的pos开始之后首次出现的位置 */ int index(char *s, char *t, int pos) {int i,j,sl,tl; i=pos; j=1; sl=strlen(s); tl=strlen(t); while(i<=sl && j<=tl) if(s[i-1]==t[j-1]) {i++; j++; } else { i=i-j+1+1; j=1;} if(j>tl) return(i-tl); else return(-1); } /* index */ 程序运行截图如下
else { choose(s,i,m,t); printf("\n 子串为t=%s\n",t); } } //end_main void choose(char *s, int i,int m,char *t) { int n;int j=0; for(n=i;n<m+i;n++) {t[j]=s[n-1];j++;} t[m]='\0'; } 程序运行结果如下:
if(k==-1) break; if(tl<=vl) //根据替换后的字符长度做判断 { m=sl+vl-tl; for(n=sl;n>=k+tl-1;n--) {s[m]=s[n];m--;} i=k-1; for(j=0;j<=vl-1;j++) { s[i]=v[j];i++;} } else { m=k+vl; for(n=k+tl;n<=sl+1;n++) {s[m-1]=s[n-1];m++;} i=k-1; for(j=0;j<tl-1;j++) { s[i]=v[j];i++;} } po=k+vl; pol=sl-tl+1; printf(" pos=%2d",po); sl=strlen(s);s[sl]='\0'; //字符串以'\0'结束,解决替换后无结尾 } } /* replace */ /* 串匹配函数 */ /* 从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的 pos开始之后首次出现的位置 */ int index(char *s, char *t, int pos) {int i,j,sl,tl; i=pos; j=1; sl=strlen(s); tl=strlen(t); while(i<=sl && j<=tl) if(s[i-1]==t[j-1]) {i++; j++; } else { i=i-j+1+1; j=1;} if(j>tl) return(i-tl); else return(-1); } /* index */ 程序运行截图如下
m=sl+tl; for(n=sl;n>=i-1;n--){s[m]=s[n];m--;}; for(j=0;j<tl;j++){s[i-1]=t[j];i++;}; } 程序运行结果如下:
3.设计可以在主串s中从第i个位置开始共取m个字符,求子串的程序。 【源程序】: #include <stdio.h> #include <string.h> #include<stdlib.h> void choose(char *s, int i,int m,char *t); //i位置截取m个字符函数 void main() //主函数 { char *s,*t; int i,sl,m; s=(char *)malloc(100*sizeof(char)); t=(char *)malloc(100*sizeof(char)); printf("\n 输入主字符串s=?"); gets(s); printf("\n s=%s\n",s); printf("\n 输入位置i=?"); scanf("%d",&i); printf("\n i=%d\n",i); printf("\n 输入字符个数m=?"); scanf("%d",&m); printf("\n m=%d\n",m); sl=strlen(s); if(i>sl) printf("i位置出错\n"); else if(i+m>sl+1) printf("m位置出错\n");
2.设计可以在主串s中第i个位置插入一个子串t的程序。 【源程序】: #include <stdio.h> #include <string.h> #include<stdlib.h> void insert(char *s,char *t, int i); //字符串插入函数 void main() //主函数 { char *s,*t; int i,sl,tl,nsl; s=(char *)malloc(100*sizeof(char)); //分配内存并返回内存首地址 t=(char *)malloc(100*sizeof(char)); printf("\n 输入主字符串s=?"); gets(s); printf("\n s=%s\n",s); printf("\n 输入子串t=?"); gets(t); printf("\n t=%s\n",t); printf("\n 输入位置i=?"); scanf("%d",&i); printf("\n i=%d\n",i); sl=strlen(s);tl=strlen(t);nsl=sl+tl; if(nsl>=100) printf("插入子串后的主串长度过大"); if(i>sl) printf("i位置出错"); insert(s,t,i); printf("\n 插入后的字符串为=%s\n",s); } //end_main void insert(char *s,char *t, int i) { int m,n,sl,tl,j; sl=strlen(s);tl=strlen(t);
Baidu Nhomakorabea
给串变量str。 int strcmp( str1 ,str2 ); str1,str2可以是串变量或常量,函数的作用是将两个串进行比较, 当 str1==str2,函数结果=0; 当 str1>str2, 函数结果>0; 当 str1<str2, 函数结果<0; char *strcat( str1,str2); str1,str2可以是串变量或常量,函数的作用是将两个串进行连接, 函数结果是连接后的新串。 二、例题中修改后的原程序代码 #include <stdio.h> #include <string.h> #include<stdlib.h> /* 函数声明 */ int index(char *s, char *t,int pos); void replace(char *s,char *t,char *v); /* 主函数 */ void main() { char *s,*t,*v; s=(char *)malloc(100*sizeof(char)); t=(char *)malloc(100*sizeof(char)); v=(char *)malloc(100*sizeof(char)); printf("\n 输入被查找字符串s=?"); gets(s); printf("\n s=%s\n",s); printf("\n 输入查找字符串t=?"); gets(t); printf("\n t=%s\n",t); printf("\n 字符串替换为v=?");gets(v); printf("v=%s\n",v); replace(s,t,v); /* 调用串置换函数 */ printf("\n\n new string=%s\n",s); } /* main */ /* 串的置换,将主串s中的t串,置换为v串 */ void replace(char *s,char *t,char *v) { int i,j,m,n,k,po,pol,sl,tl,vl; sl=strlen(s); tl=strlen(t); vl=strlen(v); printf("\n sl=%d tl=%d vl=%d\n",sl,tl,vl); po=1; pol=sl-tl+1; while( po< pol) { k=index(s,t,po); /* 调用串匹配函数 */ printf("\n k=%2d",k);
三、.实习题 1. 将上述实例打入计算机,调试运行。 字符串常量的提供有多种手段。可以在定义串类型同时初始化串 值: char t[]="abc",*v="%%%"; 还可以使用语句gets(s)进行输入;也可以用scanf("%s",s)进行输入。 请你试着用不同的方法修改、调试、运行程序。 【源程序】: #include <stdio.h> #include <string.h> #include<stdlib.h> int index(char *s, char *t,int pos); void replace(char *s,char *t,char *v); void main() //主函数 { char *s,t[]="abc",*v="%%%"; s=(char *)malloc(100*sizeof(char)); printf("\n s=?"); scanf("%s",s); printf("\n s=%s\n",s); printf("\n t=%s v=%s\n",t,v); replace(s,t,v); /* 调用串置换函数 */ printf("\n\n new string=%s\n",s);
课程名称 数据结构实验 成 绩 实验项目 串 指导教师 学生姓名 学号 班级专业 10电子本 ___ 实验地点 综合楼 实验日期 2012 年11月10日 _ 一、实习目的 1. 熟悉串类型的实现方法,了解简单文字处理的设计方法。 2. 熟悉C语言的字符和把字符串处理的原理和方法。下面简单介绍C 相关知识: (1) 字符: char ch; ch是单个字符变量 ch=’a’; ’a’ 是字符常量 (2)字符串: Char s1[10],*s2,s3[2][10]; S1 是一维字符数组,也称它是字符串变量; S2 是指向字符的指针变量,可以给它分配一批单元存放字符,也称 为串; S2=(char )malloc(sizeof(char)*10); S3 是2行10列的二维字符数组,一般看做含有2个字符串的数组 s3[0],s3[1],每个串最多容10个字符; 下列赋值语句是错误的: S1= “abcdefghi” ; 应该使用串拷贝函数: strcpy(S1, “abcdefghi”); strcoy( S2, ”abcdefghi”); strcpy(S3[0], ”123456789”); strcpy(S3[1], ”jklmnopqr”) ; 用双引号括起来的是字符串常量,在处理字符串常量时,注意总是有 一个字符‘\0’作为字符串常量的结尾 。”123456789”存入S3[0]要占用10 个位置,而不是9个。S3[0][0]里是1,……,s3[0][8]里是9,s3[0][9]里 是‘\0’(串尾标志)。 (3)常见的字符函数: int strlen(streing) string 可以是串变量或常量, 函数结果是串长度(不含‘\0’)。 strcpy( str ,str2 ); str是串变量,str2可以是串变量或常量。函数的作用是将str2的串拷贝
} end_main /* 串的置换,将主串s中的t串,置换为v串 */ void replace(char *s,char *t,char *v) { int i,j,k,po,sl,tl; sl=strlen(s); tl=strlen(t); printf("\n sl=%d tl=%d\n",sl,tl); po=0; while( po< sl-tl+1) { k=index(s,t,po); /* 调用串匹配函数 */ printf("\n k=%2d",k); if(k==-1) break; i=k-1; for(j=0;j<=tl-1;j++) { s[i]=v[j];i++;} po=k+tl; printf(" pos=%2d",po); } } /* replace */ /* 串匹配函数 */ /* 从主串s的第pos个字符开始查找子串t,函数结果是子串t在主 串s的pos开始之后首次出现的位置 */ int index(char *s, char *t, int pos) {int i,j,sl,tl; i=pos; j=1; sl=strlen(s); tl=strlen(t); while(i<=sl && j<=tl) if(s[i-1]==t[j-1]) {i++; j++; } else { i=i-j+1+1; j=1;} if(j>tl) return(i-tl); else return(-1); } /* index */ 程序运行截图如下
else { choose(s,i,m,t); printf("\n 子串为t=%s\n",t); } } //end_main void choose(char *s, int i,int m,char *t) { int n;int j=0; for(n=i;n<m+i;n++) {t[j]=s[n-1];j++;} t[m]='\0'; } 程序运行结果如下:
if(k==-1) break; if(tl<=vl) //根据替换后的字符长度做判断 { m=sl+vl-tl; for(n=sl;n>=k+tl-1;n--) {s[m]=s[n];m--;} i=k-1; for(j=0;j<=vl-1;j++) { s[i]=v[j];i++;} } else { m=k+vl; for(n=k+tl;n<=sl+1;n++) {s[m-1]=s[n-1];m++;} i=k-1; for(j=0;j<tl-1;j++) { s[i]=v[j];i++;} } po=k+vl; pol=sl-tl+1; printf(" pos=%2d",po); sl=strlen(s);s[sl]='\0'; //字符串以'\0'结束,解决替换后无结尾 } } /* replace */ /* 串匹配函数 */ /* 从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的 pos开始之后首次出现的位置 */ int index(char *s, char *t, int pos) {int i,j,sl,tl; i=pos; j=1; sl=strlen(s); tl=strlen(t); while(i<=sl && j<=tl) if(s[i-1]==t[j-1]) {i++; j++; } else { i=i-j+1+1; j=1;} if(j>tl) return(i-tl); else return(-1); } /* index */ 程序运行截图如下
m=sl+tl; for(n=sl;n>=i-1;n--){s[m]=s[n];m--;}; for(j=0;j<tl;j++){s[i-1]=t[j];i++;}; } 程序运行结果如下:
3.设计可以在主串s中从第i个位置开始共取m个字符,求子串的程序。 【源程序】: #include <stdio.h> #include <string.h> #include<stdlib.h> void choose(char *s, int i,int m,char *t); //i位置截取m个字符函数 void main() //主函数 { char *s,*t; int i,sl,m; s=(char *)malloc(100*sizeof(char)); t=(char *)malloc(100*sizeof(char)); printf("\n 输入主字符串s=?"); gets(s); printf("\n s=%s\n",s); printf("\n 输入位置i=?"); scanf("%d",&i); printf("\n i=%d\n",i); printf("\n 输入字符个数m=?"); scanf("%d",&m); printf("\n m=%d\n",m); sl=strlen(s); if(i>sl) printf("i位置出错\n"); else if(i+m>sl+1) printf("m位置出错\n");
2.设计可以在主串s中第i个位置插入一个子串t的程序。 【源程序】: #include <stdio.h> #include <string.h> #include<stdlib.h> void insert(char *s,char *t, int i); //字符串插入函数 void main() //主函数 { char *s,*t; int i,sl,tl,nsl; s=(char *)malloc(100*sizeof(char)); //分配内存并返回内存首地址 t=(char *)malloc(100*sizeof(char)); printf("\n 输入主字符串s=?"); gets(s); printf("\n s=%s\n",s); printf("\n 输入子串t=?"); gets(t); printf("\n t=%s\n",t); printf("\n 输入位置i=?"); scanf("%d",&i); printf("\n i=%d\n",i); sl=strlen(s);tl=strlen(t);nsl=sl+tl; if(nsl>=100) printf("插入子串后的主串长度过大"); if(i>sl) printf("i位置出错"); insert(s,t,i); printf("\n 插入后的字符串为=%s\n",s); } //end_main void insert(char *s,char *t, int i) { int m,n,sl,tl,j; sl=strlen(s);tl=strlen(t);
Baidu Nhomakorabea
给串变量str。 int strcmp( str1 ,str2 ); str1,str2可以是串变量或常量,函数的作用是将两个串进行比较, 当 str1==str2,函数结果=0; 当 str1>str2, 函数结果>0; 当 str1<str2, 函数结果<0; char *strcat( str1,str2); str1,str2可以是串变量或常量,函数的作用是将两个串进行连接, 函数结果是连接后的新串。 二、例题中修改后的原程序代码 #include <stdio.h> #include <string.h> #include<stdlib.h> /* 函数声明 */ int index(char *s, char *t,int pos); void replace(char *s,char *t,char *v); /* 主函数 */ void main() { char *s,*t,*v; s=(char *)malloc(100*sizeof(char)); t=(char *)malloc(100*sizeof(char)); v=(char *)malloc(100*sizeof(char)); printf("\n 输入被查找字符串s=?"); gets(s); printf("\n s=%s\n",s); printf("\n 输入查找字符串t=?"); gets(t); printf("\n t=%s\n",t); printf("\n 字符串替换为v=?");gets(v); printf("v=%s\n",v); replace(s,t,v); /* 调用串置换函数 */ printf("\n\n new string=%s\n",s); } /* main */ /* 串的置换,将主串s中的t串,置换为v串 */ void replace(char *s,char *t,char *v) { int i,j,m,n,k,po,pol,sl,tl,vl; sl=strlen(s); tl=strlen(t); vl=strlen(v); printf("\n sl=%d tl=%d vl=%d\n",sl,tl,vl); po=1; pol=sl-tl+1; while( po< pol) { k=index(s,t,po); /* 调用串匹配函数 */ printf("\n k=%2d",k);
三、.实习题 1. 将上述实例打入计算机,调试运行。 字符串常量的提供有多种手段。可以在定义串类型同时初始化串 值: char t[]="abc",*v="%%%"; 还可以使用语句gets(s)进行输入;也可以用scanf("%s",s)进行输入。 请你试着用不同的方法修改、调试、运行程序。 【源程序】: #include <stdio.h> #include <string.h> #include<stdlib.h> int index(char *s, char *t,int pos); void replace(char *s,char *t,char *v); void main() //主函数 { char *s,t[]="abc",*v="%%%"; s=(char *)malloc(100*sizeof(char)); printf("\n s=?"); scanf("%s",s); printf("\n s=%s\n",s); printf("\n t=%s v=%s\n",t,v); replace(s,t,v); /* 调用串置换函数 */ printf("\n\n new string=%s\n",s);