搜索
您的当前位置:首页正文

实验三 串基本操作的编程实现

来源:小奈知识网


HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY

数据结构 实 验 报 告 这里一定填写清楚自己选择的实验层次。(基础、 提高或者挑战) 实验项目 学生姓名 完成日期 指导教师 实验成绩 评阅教师

实验类别 学生学号 基础篇 评阅日期

实验三 串基本操作的编程实现

【实验目的】

内容:串基本操作的编程实现 要求:

串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】

验证性实验(学时数:2H)

【实验内容】

字符串长度计算,字符串的连接,字符串的替换,求子串等。

【注意事项】

1.开发语言:使用C。

2.可以自己增加其他功能。

【实验分析、说明过程】

通过本次实验,使用for循环进行串的连接和串的复制,以及串的替换。在每一步的操作中,都需要指针的移动。如在串的连接中,当s2中的一个字符添加到s1后时,s1,s2的指针都要后移一个位置,并且s1串长度加1,循环到串s2结束 【思考问题】

1、字符串的顺序存储和链表存储的差异?C语言中是如何实现字符串的? 字符串的顺序存储是用一组地址连续的存储单元来存储串中的字符序列;串的链式存储是包含字符域和指针域的节点链接结构,其优点插入删除运算方便,但空间利用率较低。 2、在字符串处理方面主要有什么操作? 求串长、 串赋值、 连接操作、 求子串、 串比较、 子串定位、 串插入、 串删除、 串替换 3、字符串的操作的主要特点是什么?举出几个字符串的应用范例? 操作都是改变赋值地址而不是改变值操作 学号、职工编号、设备编号等都是字符串处理,都要用到字符串的基本操作 【实验小结】 (总结本次实验的重难点及心得、体会、收获)

本次实验,通过上机对串的基本操作有了更深刻的了解。在编程过程中,会有错误,但都通过翻阅书籍或看范例,得以改正,获益不小。这也更加增强了我学好数据结构的信心。相信以后会编出更好的程序。 对串的逻辑结构、存储结构和基本操作的算法设计都有了一定的掌握,了解到串在高级语言中可以广泛应用,如在学号、职工编号、设备编号等都是字符串处理,都要用到字符串的基本操作。

【附录-实验代码】 #include #include #define MAXSIZE 256 //定义串允许的最大字符个数 typedef struct { char string[MAXSIZE]; //MAXSIZE为串的最大长度 int len; //串的实际长度 }SSTRING; //串的顺序存储结构表示 int str_len(SSTRING *s) //串的长度计算函数 { return s->len ; } void str_input(SSTRING *s) //串的输入函数 { int i=0; char ch; s->len=0; while((ch=getchar())!='\\n') //通过循环,从键盘输入一串字符串 { s->string[i]=ch; i++; s->len++; if(s->len >MAXSIZE) { printf(\"输入溢出\\n\"); exit(1); } } s->string[i]='\\0'; } SSTRING *str_rep(SSTRING *s1,SSTRING *s2,int pos) { //将字符串S1从pos位置处替换S2串 int i=0,j; for(j=pos-1;s1->string[j]!='\\0';j++) //从替换的起始位置开始 if(s2->string[i]!='\\0') { s1->string[j]=s2->string[i++] ; //进行替换 } else { break; } return s1; }

SSTRING *str_con(SSTRING *s1,SSTRING *s2) { //将字符串S2连接到S1串的后面,两个串合并成一个串,放到S1串中 int i=s1->len,k; for(k=0;kstring[i++]=s2->string[k]; // 通过循环,将S2串的元素逐一复制到S1串的后面, s1->len++; // 合并成一个串。 if(s1->len >MAXSIZE) { printf(\"输出溢出\\n\"); exit(1); } } s1->string[i]='\\0'; return s1; } SSTRING *str_sub(SSTRING *sub,SSTRING *s,int pos,int len) {//将串S第pos个字符开始的长度为len的字符序列复制到串sub中 int i=pos-1,j=0,k; for(k=1;k<=len;k++) { sub->string[k-1]=s->string[i] ;//逐一取出S串中从pos开始的元素,并复制到sub串中 sub->len++ ;//每复制完一个元素,sub串长度加1。 i++; j++; } sub->string[j]='\\0'; return sub; } void str_print(SSTRING *s) {//字符串输出显示 int i; for(i=0;ilen;i++) putchar(s->string[i]) ;//依次将串中的字符逐一输出到屏幕显示。 printf(\"\\n\"); } void showmenu() { //显示菜单 printf(\" 欢迎使用串操作小软件\\n\"); printf(\"\1、求串的长度\\n\"); printf(\"\2、串的替换\\n\"); printf(\"\3、串的连接\\n\"); printf(\"\4、求子串\\n\"); printf(\"\5、退出程序\\n\"); }

void main() { int position,length,no; SSTRING str,str1,str2; str.len=0; str1.len=0,str2.len=0; while(1) { showmenu(); printf(\" 请输入你的选择:\"); scanf(\"%d\ switch(no) { case 1:printf(\"请输入一串字符:\"); fflush(stdin); str_input(&str); length=str_len(&str); printf(\"字符串:%s的长度为%d\\n\ system(\"pause\"); system(\"cls\"); break; case 2:printf(\"请输入源字符串:\"); fflush(stdin); str_input(&str1); printf(\"请输入替换字符串:\"); fflush(stdin); str_input(&str2); printf(\"请输入替换位置:\"); scanf(\"%d\ str_rep(&str1,&str2,position); printf(\"替换后的结果为:\"); str_print(&str1); system(\"pause\"); system(\"cls\"); break; case 3:printf(\"请输入第一串字符:\"); fflush(stdin); str_input(&str1); printf(\"请输入第二串字符串:\"); fflush(stdin); str_input(&str2); str_con(&str1,&str2); printf(\"两串字符连接后的结果为:\"); str_print(&str1); system(\"pause\"); system(\"cls\");

break; case 4:printf(\"请输入一串字符:\"); fflush(stdin); str_input(&str1); printf(\"请输入取子串的位置和长度:\"); scanf(\"%d%d\ str_sub(&str,&str1,position,length); printf(\"子串为:\"); puts(str.string); system(\"pause\"); system(\"cls\"); break; case 5: return; } } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top