




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上1 上机实训3:串的基本操作一、 实训目的 通过实训,掌握串的运算(赋值,比较,联结,插入子串,模式匹配等) 二、 实验理论知识 1) 串的基本概念及其含义 串( string)是由零个或多个字符组成的有限序列,一般记作:s=a1a2an(n0),其中s为串的名字,用单引号括起来的字符序列为串的值;ai(1in)可以是字母、数字或其它字符(取决于程序设计语言所使用的字符集);n为串中字符的个数,称为串的长度。2) 串的存储表示及其实现 l 顺序存储可以用一组地址连续的存储单元依次存放串的各个字符,这是串的顺序存储结构,也称为顺序串l 链式存储和线性表的链式存储结构相类
2、似,也可采用链表方式存储串值。串的这种链式存储结构简称为链串。用链表存储字符串,每个结点需要有两个域:一个数据域(data)和一个指针域(Next),其中数据域存放串中的字符,指针域存放后继结点的地址。3) 模式匹配问题三、 实训案例与分析 【实例1】串的存储与基本运算 【实例分析】在本实例中练习计算字符串的长度、字符串的复制、字符串的比较、字符串的连接、字符串的插入等基本操作。在设计时1) 编写一个菜单函数,根据不同情况做(1-5)不同选择。2) 如果选择1,即要求计算输入字符串的长度。3) 如果选择2,完成字符串的复制。4) 如果选择3,完成字符串的比较。5) 如果选择4,完成两个字符串的
3、连接。6) 如果选择5,字符串的插入。【参考程序】#include #define MAX 128typedef enum fail,success status;typedef enum false,true boolean;main() int strlen();void strass();boolean strcmp();status strcat( );status strins();int t,n,i;boolean b;status st;char sMAX,s1MAX,s2MAX;printf(n1. The length of stringn);printf( 2. The a
4、ssignment of stringn);printf( 3. A string compare with another string:n);printf( 4. A string connect with another string:n);printf( 5. A string to be inserted into another stringn);printf( Please input a operation:);/*输入操作选项*/scanf(%d,&t);switch(t) case 1:printf(please input a string:n);getchar();ge
5、ts(s);n=strlen(s);printf(the length is: %d,n);break;case 2:printf(please input the first string:n);getchar();gets(s1);printf(please input the second string:n);getchar();gets(s2);strass(s1,s2);break;case 3:printf(please input the first string:n);getchar();gets(s1);printf(please input the second strin
6、g: n);gets(s2);b=strcmp(s1,s2);if (b=true)printf(equaln);elseprintf(not equaln);break;case 4:printf(please input the first string:n);getchar();gets(s1);printf(please input the second string:n);gets(s2);st=strcat(s1,s2);if(st=success)printf(answer is %sn,s1);elseprintf(error!n);break;case 5:printf(pl
7、ease input the first string:n);getchar();gets(s1);printf(please input the second string:n);gets(s2);printf(please input i:);scanf(%d,&i);st=strins(s1,i,s2);if(st=success)printf(answer is: %sn,s1);else printf(error!n);break;case 0:break;default: printf(There isnt this operation!);int strlen(s) /*求字符串
8、的长度子函数*/char s; int i;for(i=0;si!=0;i+);return (i);void strass(s1,s2)char s1,s2; int i=0;while(s1i!=0) s2i=s1i;i+;s2i=0;printf(s2 is %s,s2);boolean strcmp(s1,s2) /*字符串比较子函数*/char s1,s2; int i=0;while (s1i=s2i & s1i!=0 & s2i!=0)i+;if (s1i=0 & s2i=0)return (true);elsereturn (false);status strcat (s1,s
9、2) /*字符串连接子函数*/char s1,s2; int i,j,k;i=strlen(s1);j=strlen(s2);if(i+j)=MAXN)return(fail);for(k=0;k=j;k+)s1i+k=s2k;return (success);status strins (s1,i,s2)char s1,s2;int i; int m,n,k;m=strlen(s1);n=strlen(s2);if (im|(m+n)MAXN )return (fail) ;for(k=m;k=i;k-)s1k+n=s1k;for(k=0;kn;k+)s1i+k=s2k;return (su
10、ccess);【测试数据与结果:】计算字符串的长度1. The length of string2. The assignment of string3. A string compare with another string:4. A string connect with another string:5. A string to be inserted into another stringPlease input a opertation:1please input a string:you are a boy!the length is: 14字符串的复制 1. The lengt
11、h of string2. The assignment of string3. A string compare with another string:4. A string connect with another string:5. A string to be inserted into another stringPlease input a opertation:2please input the first string:you are a boy!please input the second string:i am a girl!s2 is you are a boy!字符
12、串的比较 1. The length of string2. The assignment of string3. A string compare with another string:4. A string connect with another string:5. A string to be inserted into another stringPlease input a opertation:3please input the first string:you are a boy!please input the second string:i am a girl!not e
13、qual字符串的连接 1. The length of string2. The assignment of string3. A string compare with another string:4. A string connect with another string:5. A string to be inserted into another stringPlease input a opertation:4please input the first string:you are a boy!please input the second string:i am a girl
14、!answer is: you are a boy!i am a girl!字符串的插入 1. The length of string2. The assignment of string3. A string compare with another string:4. A string connect with another string:5. A string to be inserted into another stringPlease input a opertation:5please input the first string:you are a boy!please i
15、nput the second string:i am a girl!please input i:2answer is i am a girl! you are a boy!【实例2】统计主串指定单词在主串中出现的次数和位置【实例描述】统计主串指定单词在主串中出现的次数和位置,要求:1) 输入以回车作为结束符的一串字符作为主串;2) 求主串中指定单词出现的次数和位置,注意单词与子串的区别;【实例分析】假设num存放出现次数,初始化为0,positioni存放每一次匹配时的位置。1) 编写一个菜单函数,根据不同情况做(0-3)不同选择2) 如果选择1,即要求匹配的是单个字符c,让i=0,依次比
16、较主串的第i个字符,如果si=c,则匹配成功,positionnum=i;num+;3) 如果选择2,即要求匹配的是子串t,则此算法即为模式匹配算法,与模式匹配不同的是每次匹配成功时不是返回,而是设置position和num的值,positionnum=i-j;num+;4) 如果选择3,即要求匹配的是单词t,假设主串中单词之间用空格分割,此算法与3)的不同,与t匹配的子串必须是一个单词,因此首先要找出主串中的单词,然后让t与找到的单词比较,若结果相等,则匹配成功,设置position和num的值,positionnum=i-j; num+;否则,查找主串中的下一个单词,直到主串结束。【实例实
17、现】#include string.h#include stdio.hchar str60;void menu() /*菜单选择函数*/char choice,c;char t20;printf( 指定类型 n);printf(=n);printf(1.单个字符n);printf(2.指定子串n);printf(3.指定单词n);printf(0.退出n);printf(=n);doprintf(请你在上述功能中选择(0-3) : );choice=getchar();getchar();switch(choice)case 1:printf(input char : ); /*指定单个字符匹
18、配的情况*/c=getchar();getchar();index_char(str,c);break;case 2:printf(input string : ); /*指定子串匹配的情况*/gets(t);index_string(str,t);break;case 3:printf(input word : ); /*指定单词匹配的情况*/gets(t);index_word(str,t);break;case 0:return;while(1);index_string(char *s,char *t) /*子串匹配函数*/int i,j,num=0,position80; /*num
19、存放匹配个数,position中存放每一次匹配的位置*/i=0;j=0;while(si!=0) /*主串没有结束*/while(si!=0&tj!=0) /*没有遇到结束符*/if(si=tj) /*继续*/i+;j+;else /*回溯*/i=i-j+1;j=0; if(tj=0)positionnum=i-j;num+;j=0; /*匹配成功,存放位置,并且次数加1*/if(num) /*如果匹配成功,输出匹配次数和位置*/printf(nthe number of string %s is %d,t,num);printf(nthe position is:);for(i=0;inum
20、;i+)printf(%5d,positioni);printf(n);elseprintf(n the string is not found!,i);index_word(char *s,char *t)int i,j,num=0,position80;char word20;i=j=0;while(si!=0) j=0;while(si= ) i+;while(si!= )&(si!=0) /*寻找主串中的单词*/wordj+=stri+;wordj=0;if(strcmp(t,word)=0) /*如果输入的单词与主串中的单词匹配*/positionnum=i-j;num+;if(num) /*如果匹配成功,输出匹配次数和位置*/printf(nthe number of word %s is %d,t,num);printf(nthe position is:);for(i=0;inum;i+)printf(%5d,positioni);printf(n);elseprintf(n the word is not found!);index_char(char *s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 残疾人劳动权益保护劳动合同签订流程详解
- 浙江省绍兴市越城区2025年八年级下学期期末数学试题及参考答案
- 大学生先进班级主要事迹材料范文(17篇)
- 建设工程施工劳务承包合同(6篇)
- (关于耳垂采血的)复习试题含答案
- 公司合规环保管理制度
- 优化备考策略的软件测试工程师试题及答案
- 2024年中国创投市场数据报告
- 医德医风演讲稿范文(19篇)
- 数据库用户角色与权限管理试题及答案
- 2025-2030中国数字PCR(DPCR)和QPCR行业市场现状供需分析及投资评估规划分析研究报告
- 相机全景拍摄与拼接技术考核试卷
- 2025年福建省福州市中考数学二检试卷
- 药房驻店药师合同协议
- 职业暴露与防试题及答案
- 2025年高考政治抢押秘籍(江苏专用)时政热点03发展民营经济-(江苏专用)(学生版+解析)
- 2025届四川省成都市高三毕业班第三次诊断性考试英语试卷读后续写-笛子失而复得的故事+讲义
- 2025年四川省成都市锦江区中考二诊物理试题(含答案)
- DB34T 4720-2024工会驿站运维服务规范
- 湖北省武汉市2025届高中毕业生四月调研考试政治试题及答案(武汉四调)
- 行政案例分析-终结性考核-国开(SC)-参考资料
评论
0/150
提交评论