字符串操作课程设计报告
- 格式:doc
- 大小:48.00 KB
- 文档页数:6
c 有关字符串课程设计一、教学目标本章节的教学目标是让学生掌握C语言中关于字符串的基本概念、操作和应用。
具体包括:1.知识目标:–理解字符串的概念及其在C语言中的表示;–掌握字符串的创建、复制、比较和长度计算等基本操作;–了解字符串数组和字符串指针的概念及应用。
2.技能目标:–能够使用C语言编写函数实现字符串的基本操作;–能够运用字符串数组和字符串指针解决实际问题。
3.情感态度价值观目标:–培养学生的逻辑思维能力和编程实践能力;–激发学生对计算机科学和编程的兴趣和热情。
二、教学内容本章节的教学内容主要包括以下几个部分:1.字符串的概念及其在C语言中的表示;2.字符串的基本操作,包括创建、复制、比较和长度计算;3.字符串数组和字符串指针的概念及应用;4.实际编程案例,运用字符串解决实际问题。
三、教学方法为了达到本章节的教学目标,将采用以下几种教学方法:1.讲授法:讲解字符串的基本概念和操作,引导学生理解字符串的内部实现和应用;2.讨论法:学生讨论字符串数组和字符串指针的概念及应用,促进学生之间的交流和思考;3.案例分析法:分析实际编程案例,让学生通过解决问题的方式掌握字符串的操作和应用;4.实验法:安排课堂实验,让学生亲自动手编写代码,巩固所学知识。
四、教学资源为了支持本章节的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C程序设计原理与应用》;2.参考书:《C语言程序设计》;3.多媒体资料:讲解字符串操作的PPT;4.实验设备:计算机和编程环境。
以上教学资源将有助于丰富学生的学习体验,提高学生的学习效果。
五、教学评估为了全面、客观地评估学生在字符串课程中的学习成果,将采用以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性;2.作业:布置相关的字符串操作练习题,评估学生对字符串基本操作的掌握程度;3.考试:设置期末考试,涵盖字符串的概念、操作和应用等内容,以评估学生的综合运用能力。
字符串操作课程设计报告
一、设计目的
本课程设计旨在让学生掌握字符串操作的基本概念、常用函数及应用,使其具备基本的字符串操作能力,为其今后的学习和工作打下坚实的基础。
二、教学内容及安排
1. 字符串基本概念
•字符串的定义
•字符串的表示方法
•字符串的属性和特点
2. 字符串常用函数
•字符串长度函数
•字符串连接函数
•字符串切片函数
•字符串查找与替换函数
•字符串大小写转换函数
3. 字符串应用
•字符串的格式化输出
•字符串的读写操作
•字符串的文本处理
•字符串的正则表达式
4. 实践操作
•字符串的基本练习
•字符串的应用练习
三、教学方法
本课程设计采用课堂讲解、案例讲解和实践操作相结合的教学方法,通过理论和实践相结合的方式,提高学生的学习兴趣和实践能力。
四、教学材料
•电脑
•Python编程软件
•相关教学资料
五、课程评价
本课程设计通过理论与实践相结合的方式,提高了学生的学习效果和实践能力。
学生可以通过实践操作,深入了解字符串操作相关的知识和应用,从而进一步提高自己的编程能力。
六、
本课程设计重点讲解了字符串操作的基本概念、常用函数及应用,让学生熟悉
掌握字符串的基本要素和常用操作,为今后的编程实践打下了坚实的基础。
同时,该课程设计注重实践操作,真正做到理论与实践的有机结合,为学生培养独立思考和自主学习的能力,为其今后的发展打下坚实的基石。
c课程字符串课程设计一、教学目标本课程的教学目标是让学生掌握字符串的基本概念、操作和应用。
通过本课程的学习,学生应能够理解字符串的组成、表示和操作方法,掌握字符串的基本算法,并能够运用字符串解决实际问题。
具体来说,知识目标包括:了解字符串的基本概念,掌握字符串的常见操作,如长度计算、字符查找、字符替换等;理解字符串的常见算法,如字符串排序、查找子串等。
技能目标包括:能够运用字符串解决实际问题,如编写程序实现字符串的排序、查找等操作。
情感态度价值观目标包括:培养学生的编程兴趣,提高学生的问题解决能力,培养学生的团队合作意识。
二、教学内容本课程的教学内容主要包括字符串的基本概念、字符串的操作、字符串的算法和字符串的应用。
具体来说,教学大纲如下:1.字符串的基本概念:介绍字符串的定义、表示和基本属性。
2.字符串的操作:讲解字符串的常见操作,如长度计算、字符查找、字符替换等。
3.字符串的算法:介绍字符串的常见算法,如字符串排序、查找子串等。
4.字符串的应用:通过实例讲解如何运用字符串解决实际问题。
三、教学方法为了实现教学目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过这些教学方法的综合运用,激发学生的学习兴趣,提高学生的主动性和参与度。
具体来说:1.讲授法:通过讲解和示例,让学生掌握字符串的基本概念和操作。
2.讨论法:学生进行小组讨论,培养学生的团队合作能力和问题解决能力。
3.案例分析法:通过分析实际案例,让学生了解字符串的应用和解决实际问题的方法。
4.实验法:安排实验课,让学生动手编写程序,巩固所学知识,培养学生的实践能力。
四、教学资源为了支持教学内容的实施和教学方法的应用,我们将选择和准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统、全面的学习资料。
2.参考书:推荐学生阅读相关参考书籍,丰富学生的知识储备。
3.多媒体资料:制作课件、教学视频等多媒体资料,提高课堂教学效果。
串操作实验报告
《串操作实验报告》
实验目的:通过对串操作的实验,掌握串的基本操作方法,提高对串操作的理解和掌握。
实验材料:计算机、编程软件、实验指导书。
实验步骤:
1. 字符串的输入输出:首先,我们学习了如何通过编程软件向计算机输入字符串,并且通过编程实现将字符串输出到屏幕上。
这一步骤帮助我们了解了如何使用编程语言来操作字符串。
2. 字符串的拼接:接着,我们学习了如何将两个字符串进行拼接。
通过实验,我们发现可以通过简单的加号操作符来实现字符串的拼接,这为我们在日后的编程中提供了很大的便利。
3. 字符串的截取:在实验中,我们还学习了如何通过编程语言来截取字符串的部分内容。
这一步骤让我们对于字符串的操作更加灵活,可以根据需要来截取所需的内容。
4. 字符串的比较:最后,我们学习了如何通过编程语言来比较两个字符串的内容。
这一步骤让我们对于字符串的比较有了更深入的理解,可以通过比较来判断字符串是否相等,或者哪个字符串的内容更大。
实验结果:通过这次实验,我们对于串操作有了更加深入的理解和掌握。
我们可以通过编程语言来实现对字符串的输入输出、拼接、截取和比较等操作,为日后的编程工作打下了坚实的基础。
结论:串操作是编程中非常重要的一部分,通过这次实验,我们对于串操作有
了更加深入的理解和掌握。
希望在日后的编程工作中能够更加灵活地运用串操作,提高编程效率和质量。
字符串操作一、问题描述字符串是一种常见的数据类型,在现实生活中有着广泛的应用。
本次课程设计需要选择合适的结构完成字符串的建立,实现串的基本操作,编写三种模式匹配算法和字符串的加密与解密算法,并利用它们实现字符串的应用:包括文本文件对单词的检索和计数。
二、基本要求程序要求选择合适的存储结构,并实现以下功能:1.完成串的基本操作,如:串的赋值,比较,连接,插入,删除;2.实现串的模式匹配,包括:穷举法,BF算法和KMP算法;3.字符串的应用:字符串的加密与解密;文本文件单词的计数;文本文件单词的检索;三、测试数据1.对模式匹配(穷举法,KMP算法和BF算法)的测试:如:在“asd sfhasd asd”中找从第3个下标开始匹配的模式串“asd”。
2.对加密与解密的测试:如:对串“afhbs 537hsj/sjdh”加密,再将加密后的串还原。
3.对文本文件单词的计数和检索的测试:如创建一个文本文件,在其中对单词“me”进行计数并且检索其所处行、列。
四、算法思想1、用结构体SString记录字符串信息,其中ch代表字符串,length代表字符串长度。
2、模式匹配:1)穷举法的Index(S,T,pos):从位置开始通过SubString截取S中T长度的字符串,并与T通过StrCompare进行比较,若找到则返回位置;否则继续。
若没找到,返回-1。
2)BF算法: IndexBF(S, T,pos)主串S从pos位置开始,模式串T从0位置开始,从目标串s=“s0s2…sn-1"的第一个字符开始和模式串t=“t0t2…tm-1"中的第一个字符比较,若相等,则继续逐个比较后续字符;否则从目标串s的第二个字符开始重新与模式串t的第一个字符进行比较。
依次类推,若从模式串s的i位置字符开始,每个字符依次和目标串t中的对应字符相等,则匹配成功,该算法返回i;否则,匹配失败,函数返回-1。
3)KMP算法:该算法较BF算法有较大改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。
北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
课程设计报告课程设计题目:研究生初试录取学生姓名:李俊专业:计算机应用技术班级: 1140302指导教师:宋文琳2012年 06 月 23日目录一)实验题目 (3)二)实验目的 (3)三)实验要求 (3)四)实验思路 (4)五)实验过程 (6)六)实验调试和结果 (9)七)实验小结 (13)实验题目字符串处理(1)不使用系统库函数,编写多个函数实现;(2)定义字符数组存放字符串,从键盘输入;(3)调用不同的函数,实现字符串的连接、拷贝、比较、求字符串长度、对字符串内字符进行排序、查找字符串中某个字符是否存在;(4)分别输出以上字符串处理的结果。
二)实验目的本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体等相关内容的综合应用,使学生能进一步熟悉掌握C语言的基本语法,进一步提升编程能力并逐步培养编程思维,进而不断提高学生解决问题的能力,并为以后的语言学习打下良好的基础。
三)实验要求1. 学生独立完成课程设计的主要内容;2. 按照实验课表安排进行,不得无故旷课;3.按照选题规则确定课程设计题目,不可随意更换,但可在完成规定的任务之后,根据个人兴趣选做其它题目;4.严格按照报告格式撰写课程设计报告;5.程序实现方式可以自选,可采用指针、数组或其任意组合方式完成。
四)实验思路1)整体思路五)实验过程代码:#include<stdio.h>void main(){void lianjie(char a[],char b[]);void kaobei(char a[],char b[]);void bijiao(char a[],char b[]);void qiuchangdu(char a[],char b[]);void paixu(char a[],char b[]);void chazhao(char a[],char b[],char c);char str1[50],str2[40];char t;int i;printf("需要进行的操作:1.连接;2.拷贝;3.比较;4.求长度;5.排序;6.查找\n");scanf("%d",&i);if(i==1){printf("要连接的字符串1:");scanf("%s",str1);printf("要连接的字符串2:");scanf("%s",str2);lianjie(str1,str2);}else if(i==2){printf("拷贝的字符串1:");scanf("%s",str1);printf("要拷贝的字符串2:");scanf("%s",str2);kaobei(str1,str2);}else if(i==3){printf("要比较的字符串1:"); scanf("%s",str1);printf("要比较的字符串2:");scanf("%s",str2);bijiao(str1,str2);}else if(i==4){printf("要求长度的字符串1:"); scanf("%s",str1);printf("要求长度的字符串2:"); qiuchangdu(str1,str2);}else if(i==5){printf("要排序的字符串1:"); scanf("%s",str1);printf("要排序的字符串2:");scanf("%s",str2);paixu(str1,str2);}else if(i==6){printf("要查找的字符串1:"); scanf("%s",str1);printf("要查找的字符串2:");scanf("%s",str2);printf("输入要查找的字符:");t=getchar();printf("\n");chazhao(str1,str2,t);}elseprintf("没有此操作\n");}void lianjie(char a[],char b[]) {int i=0,j=0;while(a[i]!='\0')i++;while(b[j]!='\0')a[i++]=b[j++]; a[i]='\0';printf("连接结果为:%s\n",a); }void kaobei(char a[],char b[]) {int i=0;for(i=0;i<11;i++)a[i]=b[i];a[i]='\0';printf("拷贝结果为%s;\n",a);}void bijiao(char a[],char b[]) {int i=0;while(a[i]==b[i]&&a[i]!='\0') i++;if(a[i]==b[i])printf("两个字符串相等;\n");else if(a[i]>b[i])printf("第一个字符串大;\n");elseprintf("第二个字符串大;\n");}void qiuchangdu(char a[],char b[]){scanf("%s",b);int i=0,j=0;while(a[i]!='\0')i++;printf("第一个字符串的长度为:%d\n;",i); while(a[j]!='\0')j++;printf("第二个字符串的长度为:%d\n",j); }void paixu(char a[],char b[]){int i=0,j=0,n=0,m=0;char t;while(a[n]!='\0')n++;for(i=0;i<n-1;i++)for(j=0;j<n-1;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("第一个字符串排序结果为:");for(i=0;i<n;i++)printf( "%c",a[i]);while(b[m]!='\0')m++;for(i=0;i<m-1;i++)for(j=0;j<m-1;j++)if(b[j]>b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;}printf("第二个字符串排序结果为:");for(i=0;i<m;i++)printf( "%c",b[i]);printf("\n");}void chazhao(char a[],char b[],char c){int i=0,j=0;while(a[i]!='\0')i++;for( j=0;j<i;j++){if(a[j]!=c) ;elsebreak;}if(j<i) printf("第一个字符串有字符 %c\n;",c); elseprintf("第一个字符没有字符%c;",c);i=0;j=0;while(b[i]!='\0')i++;for( j=0;j<i;j++){if(b[j]!=c) ;elsebreak;}if(j<i) printf("第二个字符串有字符 %c\n",c); elseprintf("第二个字符没有字符%c\n",c);}六)实验调试和结果输入界面:操作结果:调试中出现的错误和改正:定义过程中出现未将引用函数放入主程序中,定义的数组开始没有放在主程序里,而是在引用函数中,引用函数有少数不能自己写出来,在通过多次尝试之后终于得出正确的程序代码,在输入字符时未加取地址符,加入之后又遇到不能输入字符的情况。
c 课程设计字符串操作一、教学目标本章节的教学目标是让学生掌握C语言中字符串的基本操作,包括字符串的创建、复制、连接、比较和长度计算等。
知识目标要求学生理解字符串在计算机中的存储和表示方式,以及字符串操作的相关函数和语法。
技能目标要求学生能够熟练使用C语言进行字符串操作,解决实际问题。
情感态度价值观目标则是培养学生的编程兴趣,提高学生解决问题的能力,培养学生的创新思维和团队合作意识。
二、教学内容本章节的教学内容主要包括字符串的概念、字符串的创建和复制、字符串的连接和比较、字符串的长度计算等。
具体的教学大纲如下:1.字符串的概念:介绍字符串的定义、特点和表示方式。
2.字符串的创建和复制:讲解字符串的创建方法,以及如何复制字符串。
3.字符串的连接和比较:讲解如何连接两个字符串,以及如何比较两个字符串的大小。
4.字符串的长度计算:讲解如何计算字符串的长度。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法。
包括讲授法、案例分析法和实验法等。
首先,通过讲授法向学生介绍字符串的基本概念和操作。
然后,通过案例分析法分析实际问题,让学生学会如何运用字符串操作解决实际问题。
最后,通过实验法让学生动手实践,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。
2.参考书:《C++ Primer》或《C和指针》。
3.多媒体资料:讲解字符串操作的视频教程。
4.实验设备:计算机和网络设备,以便进行编程实践。
五、教学评估本章节的教学评估将采用多元化评价方式,全面反映学生的学习成果。
评估方式包括平时表现、作业、考试等。
平时表现主要评估学生在课堂上的参与程度、提问回答等情况,占总评的20%。
作业评估包括课后练习和编程任务,占总评的30%。
考试评估包括期中考试和期末考试,占总评的50%。
C++课程设计实验报告字符串操作1、程序功能简介:通过多种成员函数的定义和运算符的重载,实现字符串的各种直接操作,如:去掉串首串尾与子串相同的子符,子串在主串的定位,用新子串更换主串中的指定子串,比较字符串的大小,字符串连接等,所有功能已经经过验证.2、课程设计的要求:(1)将主函数main()中的输出语句printf()改为VC++中的输出语句。
(2)程序中对字符串的处理函数均使用了字符数组sAns,它占用了大量存储空间,试使用动态分配存储空间的方法改写所有的函数,使之避免使用预先定义的长度很大的数组;并增加类的析构函数,删除动态分配的存储空间.(3)新增运算符重载函数,重载-,-=运算符,实现字符串的删除操作,并根据返回值判断操作是否成功.(4)新增成员函数void DelRepeat(),实现在原字符串中删除相邻的重复字符的功能。
(5)新增成员函数int AddStart(FString str,int start),实现将字串str 插入到原字符串中从第start字符开始位置上,操作正确返回1.(6)改写main函数的结构,界面为菜单的形式,根据菜单选项来验证类中所定义的各种成员函数及操作符重载函数的正确性。
3、程序设计思想:1)类的数据结构原函数定义了大量的成员函数和运算符重载函数,但这些函数都是在固定的空间的字符数组的前提下实现的,课程设计要求所有的函数利用动态分配存储空间的方法存储字符串对像,所以基本上类中所有的函数都要重新编写,类中的数据成员增加一项字符串的长度int nLength,这样,动态分配存储空间的操作就可以简便一些char *p=new char[nLength+1];参考的类结构如下:class FString { // 字符串类定义private:char *sString;int nLength; //新增成员数据,是字符串对象的长度//String data must be first (to look like string)public://ConstructorFString(); //缺省构造FString(char *str){nLength=strlen(str);str=new char[nLength+1];strcpy(sString,str);}; //新增构造函数,用字符串常量初始话字符串对象FString(FString &); //新增拷贝的构造函数,用类的对象初始化~FString(){if(sString)delete[]sString;}; //新增析构函数,释放字符串对象所占用的空间void DelRepeat(); //新增成员函数,删除原字符串中相邻的重复字符int AddStart(FString str,int start); //*新增成员函数,将字符串str插入到原字符串中从第start字符串开始位置上,操作正确返回1*/inline FString operator-(const char *sAppend); //新增函数,重载减法运算符inline FString operator-(const FString sAppend); //新增函数,重载减法运算符inline FString operator-=(char* val); //新增函数,重载减法运算符inline FString operator-=(FString val); //新增函数,重载减法运算符FString Mid(const int nStart,const int nLength); //从字串sString中第nStart个字符开始取出nLength个字符FString Left(const int nLength); //从字串sString左边取出nLength 个字符FString Right(const int nLength); //从字串 sString 右边取出 nLength 个字符int InStr(const int nStart, const char *sSearch,const bool bCaseSensitive=true);int InStrRev(const int nStart, const char *sSearch,const bool bCaseSensitive=true);FString RTrim(const char sChar=' ');FString LTrim(const char sChar=' ');FString Trim(const char sChar=' ');FString Replace(const char *sSearch, const char *sReplace);FString Format(const char *sFormat, ...); //参数可变的函数int Length();//Various Operatorsinline operator char*(); //转换函数inline FString operator+(const char *sAppend); //新增函数,重载加法运算符inline FString operator+(const FString sAppend); //新增函数,重载加法运算符inline char operator[](const int nIndex); //数组下标运算符重载inline FString operator+=(char* val); //新增函数,重载加法运算符inline FString operator+=(FString val); //新增函数,重载加法运算符//Comparison Operatorsinline int operator<(const char *val);inline int operator<=(const char *val);inline int operator>(const char *val);inline int operator>=(const char *val);inline int operator!=(const char *val);inline int operator==(const char *val);inline int operator<(const FString val);inline int operator<=(const FString val);inline int operator>(const FString val);inline int operator>=(const FString val);inline int operator!=(const FString val);inline int operator==(const FString val);//Assignment OperatorsFString operator=(const char *val);FString operator=(const FString val);};2)main函数结构1 字符串加法。
《数据结构》课程实验报告四串班级:418教育技术班学号: 2018744109姓名:邓远义实验目的和要求:1.理解掌握串的有关概念和基本运算实现。
2.掌握模式匹配等串的典型算法。
二、实验内容:(给出具体的说明文字和拍摄的图片)1.已知字符串采用顺序存储结构定义如下,请编写函数int SubString(SeqString *sub, SeqString S, int pos, int len),在字符串 s 中从第 i 个位置起取长度为 len 的子串复制到sub中,复制成功函数返回1,否则返回0。
#include "stdio.h"#include "string.h"#define MAXLEN 100typedef struct{char ch[MAXLEN];int last;//指向最后一个字符的位置} SeqString;/*请将本函数补充完整,并进行测试*/int SubString(SeqString *sub, SeqString s, int pos, int len) {int i;if(pos<0||pos>st||len<1||len>st-pos){sub->last=0;return 0 ;}else{for(i=0;i<len;i++){sub->ch[i]=s.ch[i+pos-1];//(i+pos是数组下标所以要减一)}sub->last=len;sub->ch[i]='\0';//不能丢,会乱码,为什么?目前不清楚//是不是len的值没赋引起的?return 1;}}void main(){SeqString sub,s;int pos,len,n;printf("请输入一个字符串(以回车结束):\n");gets(s.ch);st=strlen(s.ch);//strlen()返回字符串的长度printf("请输入pos和len的值:");scanf("%d%d",&pos,&len);n=SubString(&sub,s, pos, len);if(n)//n!=NULL{puts(sub.ch);}elseprintf("取串不成功\n");}/*请输入一个字符串(以回车结束):DengYuanYi请输入pos和len的值:4 4Yuan烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫.会乱码的原因是需要加结束符sub->ch[i]='\0'; 否则直到把maxsize填满*/2. 已知字符串采用顺序存储结构定义如下,请设计算法函数int StrDelete(SeqString *S, int pos, int len),在字符串 s 中删除从第 i 个位置开始,长度为 len 的子串,删除成功,函数返回值为1,否则为0。
南京理工大学VC++课程设计报告
课程:VC++课程设计
系别:计算机科学与技术大类
班级:9121068401
学号:912106840149
姓名:韩飞
选题1名称:字符串操作
选题1难易级别:A级
选题2名称:
选题2难易级别:
自报成绩:
起止时间:
指导教师:严悍
2013年09月
目录
1 课题目标
通过多种成员函数的定义和运算符的重载,实现字符串的各种直接操作,如:去掉串首串尾与子串相同的子符,子串在主串的定位,用新子串更换主串中的指定子串,比较字符串的大小,字符串连接等,所有功能已经经过验证.
2 程序具体实现原理
2.1 总体方案
设计一个类,在类中包含对字符串操作的成员函数,然后在主函数中用类的对象来调用成员函数,实现字符串操作的功能。
2.1.1开发平台
VC++ 6.0;
2.1.2基本原理
2.2 程序各个功能说明
2.2.1 程序结构
class Fstring
{
private:
char * str;
int nlength;
public:
void copy(const char* s);
Fstring(){str=NULL;}
Fstring(char * s);
Fstring(bool b);
Fstring(int i);
Fstring(double d);
Fstring(const Fstring& f){this->copy(f.str);this->nlength=f.nlength;} ~Fstring();
int getLength();
char* getstr(){return this->str;}
Fstring& operator=(const char* s);
Fstring& operator=(const Fstring& f);
void show(){cout<<(this->str);}
Fstring operator+(const char * sAppend);//重载加法运算符
Fstring operator+(const Fstring sAppend);//重载加法运算符
Fstring& operator+=(const char * sAppend);//重载加法运算符
Fstring& operator+=(const Fstring sAppend);//重载加法运算符
Fstring operator-(const char* sSub);//重载减法运算符
Fstring operator-(const Fstring sSub);//重载减法运算符
Fstring& operator-=(const char* sSub);//重载减法运算符
Fstring& operator-=(const Fstring sSub);//重载减法运算符
int operator<(const char * val);//重载关系<运算符
int operator<(const Fstring val);//重载关系<运算符
int operator<=(const char * val);//重载关系<=运算符
int operator<=(const Fstring val);//重载关系<=运算符
int operator>(const char * val);//重载关系>运算符
int operator>(const Fstring val);//重载关系>运算符
int operator>=(const char * val);//重载关系>=运算符
int operator>=(const Fstring val);//重载关系>=运算符
int operator!=(const char * val);//重载关系!=运算符
int operator!=(const Fstring val);//重载关系!=运算符
int operator==(const char * val);//重载关系==运算符
int operator==(const Fstring val);//重载关系==运算符
Fstring Left(const int nlength);//从字符串左边取出nlength个字符
Fstring Right(const int nlength);//从字符串右边取出nlength个字符
int Instr(const int nStart,const char* sSearch,const bool bCaseSensitive=true);/*从第nStart 个字符处开始,在字串对象寻找字串
sSearch,参数bCaseSensitive表示忽略大小写*/
int InstrRev(const int nStart,const char* sSearch,const bool bCaseSensitive=true);//寻找字串的倒置串在主串的位置
Fstring& RTrim();//串尾整理,即去掉串尾相同的字符
Fstring& LTrim();//串首整理,即去掉串首相同的字符
Fstring& deleteall();//删除所有重复字符
Fstring Replace(const char * sSearch,const char* replace);//用字串replace替换主串中所有字串sSearch
Fstring ReplacrRev(const char* sSearch,const char* replace);//用字符串replace替换主串中所有字串sSearch的倒置串
Fstring Format(const char* sFormat,...);//按指定格式输出字符串
int AddStart(Fstring f,int start);//将字符串str插入到原字符串中从第start字符开始位置上,操作正确返回1
};
首先为Fstring类添加了两个成员变量:char*型和int型,char*型用来指向字符串,int型变量用来储存字符串长度。
然后为Fstring添加成员函数,来完成对字符串的具体操作。
2.2.2 课程设计要求的实现
(1)将主函数main()中的输出语句printf()改为VC++中的输出语句。
(2)程序中对字符串的处理函数均使用了字符数组sAns,它占用了大量存储空间,试使用动态分配存储空间的方法改写所有的函数,使之避免使用预先定义的长度很大
的数组;并增加类的析构函数,删除动态分配的存储空间.
(3)新增运算符重载函数,重载-,-=运算符,实现字符串的删除操作,并根据返回值判断操作是否成功.
(4)新增成员函数void DelRepeat(),实现在原字符串中删除相邻的重复字符的功能。
(5)新增成员函数int AddStart(FString str,int start),实现将字串str插入到原字符串中从第start字符开始位置上,操作正确返回1.
(6)改写main函数的结构,界面为菜单的形式,根据菜单选项来验证类中所定义的各种成员函数及操作符重载函数的正确性。
3 调试报告
4 总结
刚接触这道题时觉得挺简单的,但越往后写越觉得难,可能只是原理简单吧。
看课本上的一些关键代码,发现有很多的错误,因此我就决定在参考书上代码的基础上自己动手写。
在分析完这个题目需要实现的功能后,开始确定类中必需的成员函数。
在完成类的实现后,写完主函数后,编译执行时才出现很多很多的问题。
看到这些问题当时就觉得很郁闷,然后根据错误修改时才发现:大多数的问题都是因为我的不认真,犯了很多很多的低级错误。
耐心地改完错误后,编译执行成功后,那种真实的兴奋感我觉得我这辈子都忘不了。
我也觉得这可能就是程序员能够坚持每天对着电脑,编写着枯燥的代码的动力吧。
当编译执行成功时,那种喜悦感足以让我以及很多程序员决定终身投入这项工作中。
这次的课程设计让我明白了:做一个合格的程序员一定要认真,因为一个很小很小的错误都可能造成巨大的损失。
还有就是一定要有耐心,因为我们编写程序时不可避免的会犯错误,当犯错误时一定要有耐心的检查代码,找到问题的根本所在。