串查找和替换数据结构课程设计报告

合集下载

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。

二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。

在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。

三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。

2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。

3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。

4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。

5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。

四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。

2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。

通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。

3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。

链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。

在实现链表时,我们定义了一个节点结构,包含数据域和指针域。

通过指针的方式将节点连接起来,形成一个链式结构。

同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。

4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。

串的查找与替换(word文档良心出品)

串的查找与替换(word文档良心出品)

中北大学数据结构课程设计说明书2011年12月30日1.设计目的《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。

进行数据结构课程设计要达到以下目的:⏹了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;⏹初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;⏹提高综合运用所学的理论知识和方法独立分析和解决问题的能力;⏹训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

2.设计面内容与要求设计内容:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。

设计要求:(1) 符合课题要求,实现相应功能;(2) 操作方便易行;(3) 注意程序的实用性、安全性;3.本设计所采用的数据结构3.1数组数组在编程应用时调用很方便随意,但在更改数组时比较麻烦必须调用数组中的所有元素。

char keyWords[SIZE];char copyWords[SIZE];char strOne[MAXLEN];char strTwo[MAXLEN];3.2串的匹配if (keyWords[0] == strOne[i])if (keyWords[j] != strOne[countFlag++])4.功能模块详细设计4.1 详细设计思想a)需求分析打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。

b)概要设计程序头设计对程序作简单介绍以及输出程序制作人的基本信息。

main(){printf("\n\n\n\t\t\t数据结构课程设计\n");printf("\n\t\t\t题目:串的查找与替换\n");printf("\n\t\t\t专业:机电一体化软件开发与应用\n");printf("\n\t\t\t学号:0921040836\n");printf("\n\t\t\t姓名:张胜东");printf("\n\t程序作用:打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。

数据结构课程设计_中文文本编辑(文本删除、修改、查询、统计、添加)

数据结构课程设计_中文文本编辑(文本删除、修改、查询、统计、添加)

数据结构课程设计:文本编辑(最后附完整代码)一.问题描述---------------------------------------------1二.设计思路---------------------------------------------1三.系统实现功能1.建立单链表-------------------------------------------22.显示文章内容---------------------------------------- 33.查找文章语句-----------------------------------------34.删除文章语句-----------------------------------------55.替换文章语句-----------------------------------------76.统计文章字数-----------------------------------------107.写入文本结束程序--------------------------------------10四.系统不足及需改进分------------------------------------11五.文件清单说明------------------------------------------11六:附录-------------------------------------------------12一:问题描述本次我所做的课程设计为:文本编辑,主要内容是对中文文本的显示、查找、删除、替换、统计、写入文本。

在程序选择功能后根据提示,输入任意长度中文语句即可对文章进行操作。

二:设计思路文本编辑,顾名思义就是对一遍文章进行编辑,我所设计的是对中文的编辑。

中文有两个字节(汉字、标点),通常情况下通过文件输入流仅仅可以取一个字节或者是以空格为分隔符取单词这仅仅对英文的文章适用,周六周日我从网上搜索相关方法,未找到一条切实可用的对中文字符操作的方法。

串-数据结构实验报告

串-数据结构实验报告

串-数据结构实验报告串数据结构实验报告一、实验目的本次实验的主要目的是深入理解和掌握串这种数据结构的基本概念、存储方式以及相关的操作算法。

通过实际编程实现串的基本操作,提高对数据结构的理解和编程能力,培养解决实际问题的思维和方法。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

三、实验原理(一)串的定义串是由零个或多个字符组成的有限序列。

在本次实验中,我们主要关注的是字符串。

(二)串的存储方式1、顺序存储定长顺序存储:使用固定长度的数组来存储字符串,长度不足时用特定字符填充。

堆分配存储:根据字符串的实际长度动态分配存储空间。

2、链式存储每个节点存储一个字符,并通过指针链接起来。

(三)串的基本操作1、串的创建和初始化2、串的赋值3、串的连接4、串的比较5、求子串6、串的插入和删除四、实验内容及步骤(一)顺序存储方式下串的实现1、定义一个结构体来表示顺序存储的字符串,包含字符数组和字符串的实际长度。

```cppstruct SeqString {char str;int length;};```2、实现串的创建和初始化函数```cppSeqString createSeqString(const char initStr) {int len = strlen(initStr);SeqString s;sstr = new charlen + 1;strcpy(sstr, initStr);slength = len;return s;}```3、串的赋值函数```cppvoid assignSeqString(SeqString& s, const char newStr) {delete sstr;int len = strlen(newStr);sstr = new charlen + 1;strcpy(sstr, newStr);slength = len;}```4、串的连接函数```cppSeqString concatSeqString(const SeqString& s1, const SeqString& s2) {SeqString result;resultlength = s1length + s2length;resultstr = new charresultlength + 1;strcpy(resultstr, s1str);strcat(resultstr, s2str);return result;}```5、串的比较函数```cppint compareSeqString(const SeqString& s1, const SeqString& s2) {return strcmp(s1str, s2str);}```6、求子串函数```cppSeqString subSeqString(const SeqString& s, int start, int len) {SeqString sub;sublength = len;substr = new charlen + 1;strncpy(substr, sstr + start, len);substrlen ='\0';return sub;}```7、串的插入函数```cppvoid insertSeqString(SeqString& s, int pos, const SeqString& insertStr) {int newLength = slength + insertStrlength;char newStr = new charnewLength + 1;strncpy(newStr, sstr, pos);strcpy(newStr + pos, insertStrstr);strcpy(newStr + pos + insertStrlength, sstr + pos);delete sstr;sstr = newStr;slength = newLength;}```8、串的删除函数```cppvoid deleteSeqString(SeqString& s, int start, int len) {int newLength = slength len;char newStr = new charnewLength + 1;strncpy(newStr, sstr, start);strcpy(newStr + start, sstr + start + len);delete sstr;sstr = newStr;slength = newLength;}```(二)链式存储方式下串的实现1、定义一个节点结构体```cppstruct LinkNode {char data;LinkNode next;LinkNode(char c) : data(c), next(NULL) {}};```2、定义一个链式存储的字符串类```cppclass LinkString {private:LinkNode head;int length;public:LinkString(const char initStr);~LinkString();void assign(const char newStr);LinkString concat(const LinkString& other);int compare(const LinkString& other);LinkString subString(int start, int len);void insert(int pos, const LinkString& insertStr);void deleteSub(int start, int len);};```3、实现各个函数```cppLinkString::LinkString(const char initStr) {length = strlen(initStr);head = NULL;LinkNode p = NULL;for (int i = 0; i < length; i++){LinkNode newNode = new LinkNode(initStri);if (head == NULL) {head = newNode;p = head;} else {p>next = newNode;p = p>next;}}}LinkString::~LinkString(){LinkNode p = head;while (p) {LinkNode temp = p;p = p>next;delete temp;}}void LinkString::assign(const char newStr) {//先释放原有的链表LinkNode p = head;while (p) {LinkNode temp = p;p = p>next;delete temp;}length = strlen(newStr);head = NULL;p = NULL;for (int i = 0; i < length; i++){LinkNode newNode = new LinkNode(newStri);if (head == NULL) {head = newNode;p = head;} else {p>next = newNode;p = p>next;}}}LinkString LinkString::concat(const LinkString& other) {LinkString result;LinkNode p1 = head;LinkNode p2 = otherhead;LinkNode p = NULL;while (p1) {LinkNode newNode = new LinkNode(p1->data);if (resulthead == NULL) {resulthead = newNode;p = resulthead;} else {p>next = newNode;p = p>next;}p1 = p1->next;}while (p2) {LinkNode newNode = new LinkNode(p2->data);if (resulthead == NULL) {resulthead = newNode;p = resulthead;} else {p>next = newNode;p = p>next;}p2 = p2->next;}resultlength = length + otherlength;return result;}int LinkString::compare(const LinkString& other) {LinkNode p1 = head;LinkNode p2 = otherhead;while (p1 && p2 && p1->data == p2->data) {p1 = p1->next;p2 = p2->next;}if (p1 == NULL && p2 == NULL) {return 0;} else if (p1 == NULL) {return -1;} else if (p2 == NULL) {return 1;} else {return p1->data p2->data;}}LinkString LinkString::subString(int start, int len) {LinkString sub;LinkNode p = head;for (int i = 0; i < start; i++){p = p>next;}for (int i = 0; i < len; i++){LinkNode newNode = new LinkNode(p>data);if (subhead == NULL) {subhead = newNode;} else {LinkNode temp = subhead;while (temp>next) {temp = temp>next;}temp>next = newNode;}p = p>next;}sublength = len;return sub;}void LinkString::insert(int pos, const LinkString& insertStr) {LinkNode p = head;for (int i = 0; i < pos 1; i++){p = p>next;}LinkNode insertHead = insertStrhead;while (insertHead) {LinkNode newNode = new LinkNode(insertHead>data);newNode>next = p>next;p>next = newNode;p = p>next;insertHead = insertHead>next;}length += insertStrlength;}void LinkString::deleteSub(int start, int len) {LinkNode p = head;for (int i = 0; i < start 1; i++){p = p>next;}LinkNode temp = p>next;for (int i = 0; i < len; i++){LinkNode delNode = temp;temp = temp>next;delete delNode;}p>next = temp;length = len;}```(三)测试用例1、顺序存储方式的测试```cppint main(){SeqString s1 = createSeqString("Hello");SeqString s2 = createSeqString("World");SeqString s3 = concatSeqString(s1, s2);std::cout <<"连接后的字符串: "<< s3str << std::endl; int cmpResult = compareSeqString(s1, s2);if (cmpResult < 0) {std::cout <<"s1 小于 s2" << std::endl;} else if (cmpResult == 0) {std::cout <<"s1 等于 s2" << std::endl;} else {std::cout <<"s1 大于 s2" << std::endl;}SeqString sub = subSeqString(s1, 1, 3);std::cout <<"子串: "<< substr << std::endl; insertSeqString(s1, 2, s2);std::cout <<"插入后的字符串: "<< s1str << std::endl; deleteSeqString(s1, 3, 2);std::cout <<"删除后的字符串: "<< s1str << std::endl; return 0;}```2、链式存储方式的测试```cppint main(){LinkString ls1("Hello");LinkString ls2("World");LinkString ls3 = ls1concat(ls2);std::cout <<"连接后的字符串: ";LinkNode p = ls3head;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;int cmpResult = ls1compare(ls2);if (cmpResult < 0) {std::cout <<"ls1 小于 ls2" << std::endl;} else if (cmpResult == 0) {std::cout <<"ls1 等于 ls2" << std::endl;} else {std::cout <<"ls1 大于 ls2" << std::endl;}LinkString sub = ls1subString(1, 3);std::cout <<"子串: ";p = subhead;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;ls1insert(2, ls2);std::cout <<"插入后的字符串: ";p = ls1head;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;ls1deleteSub(3, 2);std::cout <<"删除后的字符串: ";p = ls1head;while (p) {std::cout << p>data;p = p>next;}std::cout << std::endl;return 0;}```五、实验结果及分析(一)顺序存储方式1、连接操作成功实现,输出了正确连接后的字符串。

数据结构串实验报告

数据结构串实验报告

数据结构串实验报告实验报告课程数据结构实验名称实验三串学号姓名实验日期:实验三串实验目的:1. 熟悉串类型的实现方法,了解简单文字处理的设计方法;2. 熟悉C语言的字符和把字符串处理的原理和方法;3. 熟悉并掌握模式匹配算法。

实验原理:顺序存储结构下的关于字符串操作的基本算法。

模式匹配算法BF、KMP实验内容:4-19. 在4.4.3节例4-6的基础上,编写比较Brute-Force算法和KMP算法比较次数的程序。

4-20. 设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V),即要求在主串S中,从位置start开始查找是否存在字串T。

若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0;并要求设计I am a student”,T=“student”,V=“teacher”。

主函数进行测试。

一个测试例子为:S=“程序代码:4-19的代码:/*静态存储结构*/typedef struct{char str[MaxSize];int length;}String;/*初始化操作*/void Initiate(String *S) {S->length=0;}/*插入子串操作 */int Insert(String *S, int pos, String T)/*在串S的pos位置插入子串T*/{int i;if(pos<0||pos>S->length){printf("The parameter pos is error!\n");return 0;}else if(S->length+T.length>MaxSize){printf("The space of the array is not enough!\n"); return 0;}else{for(i=S->length-1; i>=pos; i--)S->str[i+T.length]=S->str[i];/*依次后移数据元素*/for(i=0; i<T.length; i++)S->str[pos+i]=T.str[i]; /*插入*/S->length=S->length+T.length;/*产生新的串长度值*/return 1;}}/*删除子串操作 */int Delete(String *S, int pos, int len) /*删除串S的从pos位置开始长度为len的子串值*/{int i;if(S->length<=0){printf("No elements deleting!\n");return 0;}else if(pos<0||len<0||pos+len>S->length){printf("The parameters pos and len are not correct!\n"); return 0;}else{for(i=pos+len; i<=S->length-1; i++)S->str[i-len]=S->str[i];/*依次前移数据元素*/S->length=S->length-len;/*产生新的串长度值*/return 1;}}/*取子串操作 */int SubString(String S, int pos, int len, String *T)/*取串S的从pos位置开始长度为len的子串值赋给子串T*/ {int i;if(pos<0||len<0||pos+len>S.length){printf("The parameters pos and len are not correct!\n"); return 0;}else{for(i=0; i<=len; i++)T->str[i]=S.str[pos+i]; /*给子串T赋值*/T->length=len; /*给子串T的长度域赋值*/return 1;}}/*查找子串BF(Brute-Force)操作*/int BFIndex(String S, int start, String T)/*查找主串S从start开始的子串T,找到返回T在S中的开始字符下标,否则返回-1*/ {int i= start, j=0, v;while(i<S.length && j<T.length){if(S.str[i]==T.str[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j==T.length)v=i-T.length;elsev=-1;return v;}/*查找子串KMP(D.E.Knuth-J.H.Morris-V.R.Pratt)操作 */ int KMPIndex(String S, int start, String T, int next[])/*查找主串S从start开始的子串T,找到返回T在S中的首字符下标,*/ /*否则返回-1*//*数组Next中存放有模式串T的next[j]值*/{int i= start, j=0, v;while(i<S.length && j<T.length){if(S.str[i]==T.str[j]){i++;j++;}else if(j==0) i++;else j=next[j];}if(j==T.length)v=i-T.length;elsev=-1;return v;}/*求模式串next[j]值的操作 */void GetNext(String T, int next[])/*求子串T的next[j]值并存放于数组next中*/ {int j=1, k=0;next[0]=-1;next[1]=0;while(j<T.length){if(T.str[j]=T.str[k]){next[j+1]=k+1;j++;k++;}else if(k==0){next[j+1]=0;j++;}else k=next[k];}}/*查找子串BF(Brute-Force)算法累计次数 */int BFIndexC(String S, int start, String T)/*查找主串S从start开始的子串T,找到返回T在S中的开始字符下标,否则返回-1*/{int i= start, j=0, t=0;while(i<S.length && j<T.length){if(S.str[i]==T.str[j]){i++;j++;}else{i=i-j+1;j=0;}t++;}return t;}/*查找子串KMP(D.E.Knuth-J.H.Morris-V.R.Pratt)操作 */ int KMPIndexC(String S, int start, String T, int next[])/*查找主串S从start开始的子串T,找到返回T在S中的首字符下标,*/ /*否则返回-1*//*数组Next中存放有模式串T的next[j]值*/{int i= start, j=0, t=0;while(i<S.length && j<T.length){if(S.str[i]==T.str[j]){i++;j++;}else if(j==0)i++;else j=next[j];t++;}return t;}测试主函数:#include<stdio.h>#define MaxSize 100#include"SString.h"#include"BFandKMP.h"void main(void){String S={{"cddcdc"},6}, T={{"abcde"},5};String S1={{"aaaaaaaa"},8}, T1={{"aaaab"},5};String S2={{"aaaaaaaaaaaaaaaaad"},18}, T2={{"aaaab"},5};int next[20], count;count=BFIndexC(S,0,T);printf("从S中查找T的Brute-Force算法比较次数:%d\n",count); GetNext(T, next);count=KMPIndexC(S,0,T,next);printf("从S中查找T的KMP算法比较次数:%d\n",count);count=BFIndexC(S1,0,T1);printf("从S1中查找T1的Brute-Force算法比较次数:%d\n",count); GetNext(T1, next);count=KMPIndexC(S1,0,T1,next);printf("从S1中查找T1的KMP算法比较次数:%d\n",count);count=BFIndexC(S2,0,T2);printf("从S2中查找T2的Brute-Force算法比较次数:%d\n",count); GetNext(T2, next);count=KMPIndexC(S2,0,T2,next);printf("从S2中查找T2的KMP算法比较次数:%d\n",count);}4-20的部分代码:Replace函数:/* 从主串S中查找字串T,若存在,并用串V替换串T并返回1,否则,返回0*/ int Replace(String S,int start,String T,String V){int i,v;Initiate(&S);Initiate(&T);Initiate(&V);for(i=0; i<strlen(S.str); i++)S.length=S.length+1;for(i=0; i<strlen(T.str); i++)T.length=T.length+1;for(i=0; i<strlen(V.str); i++)V.length=V.length+1;i=BFIndex(S, 0, T);if (i!=-1){if(Delete(&S, i, T.length))Insert(&S, i, V);for(i=0; i<S.length; i++)printf("%c", S.str[i]);printf("\n");return v=1;}else{printf("主串S中不存在串T\n");return v=0;}}测试主函数:#define MaxSize 80#include<stdio.h>#include<string.h>#include "SString.h"int main(void){ int v;String S={"I am a student."}, T={"student"}, V={"teacher"}; v=Replace(S,0,T,V);printf("返回%d\n",v);}实验结果:4-19.程序调式结果:4-20.程序调式结果:总结与思考KMP算法的比较次数比Brute-Force算法的少。

串的数据结构实验报告

串的数据结构实验报告

串的数据结构实验报告
《串的数据结构实验报告》
在计算机科学领域,数据结构是非常重要的基础知识之一。

而串(String)作为一种基本的数据结构,在实际应用中也扮演着重要的角色。

本实验报告将介绍串的数据结构以及在实验中的应用和表现。

首先,串是由零个或多个字符组成的有限序列,是一种线性表。

在计算机中,串通常用来表示文本数据,比如字符串、文件名等。

在实际应用中,串的操作非常频繁,比如查找、替换、插入、删除等。

因此,对串的数据结构进行深入的研究和实验是非常有意义的。

在本次实验中,我们选择了C语言作为实验的编程语言,使用指针和动态内存分配来实现串的数据结构。

我们首先定义了一个结构体来表示串,结构体中包括串的长度和字符数组指针。

然后,我们实现了一系列操作函数,比如串的初始化、销毁、拷贝、连接、比较等。

通过这些操作函数,我们可以对串进行各种操作,从而验证串的数据结构的有效性和实用性。

在实验过程中,我们发现串的数据结构在实际应用中表现出了很好的性能和灵活性。

比如,在进行串的连接操作时,我们可以直接使用指针进行操作,而不需要额外的内存开销。

在进行串的比较操作时,我们可以逐个字符进行比较,从而实现高效的比较操作。

这些实验结果表明,串的数据结构在实际应用中具有很高的实用价值。

总的来说,本次实验对串的数据结构进行了深入的研究和实验,验证了串的数据结构在实际应用中的有效性和实用性。

通过本次实验,我们对串的数据结构有了更深入的理解,也为以后的实际应用提供了参考和借鉴。

希望本次实验报
告能对读者有所帮助,也希望能够对串的数据结构进行更深入的研究和探索。

数据结构串实验报告

数据结构串实验报告

数据结构串实验报告数据结构串实验报告引言:数据结构是计算机科学中的重要概念之一,它研究如何组织和存储数据,以便能够高效地访问和操作。

串是一种特殊的数据结构,它由一系列字符组成,可以用来表示文本、字符串等信息。

本实验旨在通过实现串的基本操作,深入理解数据结构的原理和应用。

一、实验目的本实验的主要目的是掌握串的基本操作,包括串的初始化、插入、删除、查找等。

通过实际编程实现这些操作,可以加深对数据结构的理解,并提高编程能力。

二、实验环境本实验使用C语言进行编程,需要在计算机上安装相应的开发环境,如GCC编译器等。

三、实验内容1. 串的初始化串的初始化是指将一个空串创建出来,并为其分配内存空间。

在实验中,可以使用字符数组来表示串,并通过赋值操作将空串初始化。

2. 串的插入串的插入是指在指定位置插入一个或多个字符。

在实验中,可以通过遍历数组,将插入位置之后的字符依次后移,然后将待插入的字符放入指定位置。

3. 串的删除串的删除是指删除指定位置的一个或多个字符。

在实验中,可以通过遍历数组,将删除位置之后的字符依次前移,覆盖待删除的字符。

4. 串的查找串的查找是指在串中查找指定字符或子串,并返回其位置。

在实验中,可以通过遍历数组,逐个比较字符或子串,找到匹配的位置。

五、实验步骤1. 初始化串首先,创建一个字符数组,并将其初始化为空串。

2. 插入字符在指定位置插入一个字符,可以通过遍历数组,将插入位置之后的字符依次后移,然后将待插入的字符放入指定位置。

3. 删除字符删除指定位置的一个字符,可以通过遍历数组,将删除位置之后的字符依次前移,覆盖待删除的字符。

4. 查找字符在串中查找指定字符,可以通过遍历数组,逐个比较字符,找到匹配的位置。

六、实验结果经过实验,我们成功实现了串的初始化、插入、删除和查找等基本操作。

通过不断调试和优化,我们的程序能够高效地处理大量的字符操作,具有较好的性能和稳定性。

七、实验总结通过本次实验,我们深入理解了数据结构中串的原理和应用。

数据结构串的实验报告

数据结构串的实验报告

一、实验目的1. 理解串的定义、性质和操作;2. 掌握串的基本操作,如串的创建、复制、连接、求子串、求逆序、求长度等;3. 熟练运用串的常用算法,如串的模式匹配算法(如KMP算法);4. 培养编程能力和算法设计能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容1. 串的创建与初始化2. 串的复制3. 串的连接4. 串的求子串5. 串的求逆序6. 串的求长度7. 串的模式匹配算法(KMP算法)四、实验步骤1. 串的创建与初始化(1)创建一个串对象;(2)初始化串的长度;(3)初始化串的内容。

2. 串的复制(1)创建一个目标串对象;(2)使用复制构造函数将源串复制到目标串。

3. 串的连接(1)创建一个目标串对象;(2)使用连接函数将源串连接到目标串。

4. 串的求子串(1)创建一个目标串对象;(2)使用求子串函数从源串中提取子串。

5. 串的求逆序(1)创建一个目标串对象;(2)使用逆序函数将源串逆序。

6. 串的求长度(1)获取源串的长度。

7. 串的模式匹配算法(KMP算法)(1)创建一个模式串对象;(2)使用KMP算法在源串中查找模式串。

五、实验结果与分析1. 串的创建与初始化实验结果:成功创建了一个串对象,并初始化了其长度和内容。

2. 串的复制实验结果:成功将源串复制到目标串。

3. 串的连接实验结果:成功将源串连接到目标串。

4. 串的求子串实验结果:成功从源串中提取了子串。

5. 串的求逆序实验结果:成功将源串逆序。

6. 串的求长度实验结果:成功获取了源串的长度。

7. 串的模式匹配算法(KMP算法)实验结果:成功在源串中找到了模式串。

六、实验总结通过本次实验,我对串的定义、性质和操作有了更深入的了解,掌握了串的基本操作和常用算法。

在实验过程中,我遇到了一些问题,如KMP算法的编写和调试,但在老师和同学的指导下,我成功地解决了这些问题。

字符串的查找与替换

字符串的查找与替换

数据结构课程设计报告系别:计算机系专业:计算机科学与技术姓名:学号:指导老师:2010年1月13日一、课题名称:串的查找和替换二、课题来源:课程组自拟三、课题类型:综合型四、目的意义:1.通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中2.复习C语言中数组,循环,选择等函数和C语言常用文件处理函数3.训练学生进行复杂程序设计的技能和培养良好的程序设计习惯五、基本要求:(1)打开一篇英文文章,在该文章中找出所有给定的单词,(2)对所有给定的单词替换为另外一个单词,再存盘。

六、运行环境Microsoft Visual C++ 6.0软件七.课程设计步骤简介(1)设计思想: 先建立一个文件,然后从文件中读取字符串保存到数组中。

从键盘输入被替换的单词,然后删除这个单词。

从键盘中输入替换的单词,把它插入到被删除的单词的位置。

然后把该字符串再写入到文件中(2)功能模块详细设计initstr()从文件初始化数组inputchatihuan()从键盘输入要替换的单词charu(char source[],int index,char dest[])把要替换的单词插入到被替换单词位置 tihuans()调用函数是实现替换(3)采用数据结构数组定义文章和单词长度 str[500]保存从文件中读取的字符chazhao[15]保存被替换的单词tihuan[15]保存要替换的单词(4)自定函数: chazhaos()执行查找tihuans()执行替换save()存储welform()输出主菜单(5)运用C语言if语句,while循环,for循环C语言常用文件处理函数:fopen() 打开流———fclose() 关闭流fputc() 写一个字符到流中———fgetc() 从流中读一个字符feof() 到达文件尾时返回真值(2)程序流程图(3)程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>/*字符串系统函数*/FILE* fp; /*声明fp是指针,用来指向FILE类型的对象*/char str[10000]; /*定义一个字符型数组*/char chazhao[1000];char tihuan[1000];void initstr() /*从文件初始化数组*/{int i=0; /*定义变量*/fp=fopen("string.txt","r"); /*重新打开文件*/while(!feof(fp)) /*循环语句,到达文件尾时返回真值*/{str[i]=fgetc(fp); /*从文件中读取字符*/i++;}str[--i]='\0'; /*循环结束*/fclose(fp); /*关闭文件*/}void inputchatihuan() /*输入要替换的字符串*/{ printf("输入要查找的单词:\n"); /*输出查找提示语*/scanf("%s",chazhao); /*输入*/printf("输入要替换的单词:\n"); /*输出替换提示语*/scanf("%s",tihuan); /*输入*/getchar(); /*回车返回*/}/*查找第一个出现要查找字符的下标*/int chazhaostring() /*定义函数*/{int i,j,k; /*定义变量i,j,k*/for(i=0;i<strlen(str);i++) /*for循环语句*/{ j=i;k=0;while((str[j]==chazhao[k])&&(chazhao[k]!='\0')&&(str[j]!='\0'))/*while 循环语句*/{ j++;k++;}if(chazhao[k]=='\0') return i;/*字符串的第一个字符开始循环,知道字符结束,for循环结束*/}return -1;}void chazhaos() /*查看文章中共有多少个要查找的字符*/{int i,j,k,all=0; /*定义变量i,j,k,all all的值为0*/printf("输入要查找的单词:\n");scanf("%s",chazhao);for(i=0;i<strlen(str);i++) /*for循环*/{ j=i;k=0;while((str[j]==chazhao[k])&&(chazhao[k]!='\0')&&(str[j]!='\0'))/*while循环语句*/{ j++;k++;}if(chazhao[k]=='\0') all++; /*每当发现查找内容,all的植就加1*/}printf("查找成功!\n");printf("一共查找了%d 个%s",all,chazhao);printf("\n按回车返回");getchar();getchar(); /*回车返回*/}void charu(char source[],int index,char dest[]) /*从指定的下标开始插入dest数组中的元素*/ {int i,j,k,m;j=strlen(dest);/*第一步,计算串dest的长度,存入j*/k=strlen(source);/*第二步,计算串source的长度,存入k*/source[j+k]='\0';i=j+k-1;m=k-1;while(m>=index){source[i]=source[m];i--;m--;}i=index; m=0;while(m<j){source[i]=dest[m];i++;m++;}}void tihuans()/*将str中要替换的内容替换掉*/{int a,b=0; /*定义变量a,b b的值为0*/ inputchatihuan();do{ a=chazhaostring();b=a;if(b==-1) /*选择语句*/{printf(" 此单词不存在!\n");return;}else{ while(str[b+strlen(chazhao)]!='\0') /*while循环*/ {str[b]=str[b+strlen(chazhao)];b++;}str[b]='\0';charu(str,a,tihuan);}a=chazhaostring();}while(a!=-1);printf("替换成功\n");printf("\n按回车返回.....");getchar(); /*回车返回*/ }/*保存修改后的文章信息*/void save(){ int i=0;FILE *fp;fp=fopen("string.txt","w"); /*写入文件*/while(i<strlen(str)) /*while循环*/{fputc(str[i],fp); /*写入字符到文件中*/i++;}}void welform() /*窗口跳转*/{printf(" 主菜单\n");printf("*---------------------------------------*\n");printf("\n");printf("###1: 输出内容*\n");printf("\n");printf("###2: 查找单词*\n");printf("\n");printf("###3: 替换单词*\n");printf("\n");printf("###0: 退出程序*\n");printf("\n");printf("*---------------------------------------*\n");printf("\n\n按回车返回:\n");}void main(){char ch;initstr();while(1){welform();scanf("%d",&ch);switch(ch){case 1:;printf("%s\n",str);getchar();getchar();break;/*选择1 打开string.txt文件并显示*/case 2:;chazhaos();break; /*选择2 执行chazhaos()*/ case 3:;tihuans();break; /*选择3 执行tihuans()*/case 0:save(); exit(0); /*选择0 执行saves(),退出*/default: printf("\n你输入的数字有误!\n"); /*如果上面条件都不成立时运行*/printf("按回车返回");getchar();getchar(); /*回车返回*/ }}}八、运行结果开始运行1输出内容2查找单词3替换单词a成功替换b替换失败4退出程序主要参考资料:[1]严蔚敏等《数据结构》清华大学出版社[2]夏涛《C语言程序设计》北京邮电大学出版社[3]参考网站。

数据结构_串的基本操作_课程设计_实验报告

数据结构_串的基本操作_课程设计_实验报告
NO3:程序设计的优缺点及遇到的问题....................................................................11 1.程序设计的优缺点...........................................................................................11 2.在程序设计的过程中遇到的问题:...............................................................11
顾名思义,串及其基本操作,就是要在理解串的基本概念和特征的基础 上,了解串的内部表示和处理方法。这样才能有效地实现串的基本操作。串,也 还是字符串,是一种特殊的线性表。特殊之处在于表中的每一个元素都是字符, 以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有联接、求 串长、求子串、比较串的大小、串的插入、串的删除、子串的定位和置换。因为 所要进行的操作比较零散也比较多,所以就要用到多个函数把这个整体的课程设 计划分成多个模块来进行。每个函数对应一个功能。在主函数中,用一个菜单, 就可以将原来的已分模块的函数系统地进行检验及操作。在程序设计的过程中, 根据课程设计的目的和基本要求,注意一些容易出错的地方及问题。
printf("请输入两串字符串:");
scanf("%s%s",str1,str2);
if(strcmp(str1,str2)>0) printf("1");
2
循环下,输入一个数字。每个数字代表不同的功能。然后用一个 switch 语句,
不同的 case 对应不同的函数,如:case(0)就可以代表求字符串的串长。

串的操作实验报告

串的操作实验报告

数据结构实验报告报告名称串的操作专业网络工程班级学号姓名指导教师陈淑红李珍辉黄哲年月日一、实验目的:熟悉串类型的实现方法,了解简单文字处理的设计方法。

二、实验内容与基本要求:1.设计可以在主串s中第i个位置之前插入一个子串t的程序。

2.设计可以在主串s中从第i个位置开始共取m个字符,求子串的程序。

3.设计一个程序求子串t在主串s中的起始位置三、概要设计:1.数据结构:#include <stdio.h>#define MaxSize 100 /*最多的字符个数*/typedef struct{ char data[MaxSize]; /*定义可容纳MaxSize个字符的空间*/ int len; /*标记当前实际串长*/} SqString;2.抽象数据类型:ADT String {数据对象:D={ a i |a i∈CharacterSet,i=1,2,...,n, n≥0 }数据关系:R1={ < a i-1, a i > | a i-1, a i∈D, i=2,...,n }StrAssign (&T, chars)初始条件:chars 是字符串常量。

操作结果:把chars 赋为T 的值。

StrCopy (&T, S)初始条件:串S 存在。

操作结果:由串S 复制得串T。

DestroyString (&S)初始条件:串S 存在。

操作结果:串S 被销毁。

StrEmpty(S)初始条件:串S存在。

操作结果:若S 为空串,则返回TRUE,否则返回FALSE。

StrCompare (S, T)初始条件:串S 和T 存在。

操作结果:若S > T,则返回值> 0;若S = T,则返回值= 0;若S < T,则返回值< 0。

StrLength (S)初始条件:串S 存在。

操作结果:返回S 的元素个数,称为串的长度。

Concat (&T, S1, S2)初始条件:串S1 和S2 存在。

数据结构-课程设计串的查找与替换 (1)

数据结构-课程设计串的查找与替换 (1)

数据结构课程设计——串的查找与替换一、问题陈述:二、需求分析:三、概要设计和详细设计:四、程序代码:五、结果与测试:六、体会与总结:一、问题陈述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。

设计要求:(1) 符合课题要求,实现相应功能;(2) 操作方便易行;(3) 注意程序的实用性、安全性;二、需求分析:串的查找与替换要实现的功能是:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。

首先实现程序比较简单的功能,即:输入要替换的单词和给定单词gets(keyWords);gets(copyWords)。

然后实现程序打开文件的功能。

最后编写最核心的替换功能,首先用关键字来匹配要查找的单词,第一个单词匹配上的话再判断这个关键字在不在单词的首字母上,否则不匹配,主要是要实现替换单词的功能不替换其他单词中的字符串。

然后匹配第二个字母,这样一次类推的判断。

不匹配的单词直接放入strTwo数组中,匹配的单词先替换然后再放入strTwo数组中。

三、概要设计和详细设计:➢程序头设计对程序作简单介绍以及输出程序制作人的基本信息。

main(){printf("\n\n\n\t\t\t数据结构课程设计\n");printf("\n\t\t\t题目:串的查找与替换\n");printf("\n\t\t\t专业:信息管理与信息系统\n");printf("\n\t\t\t学号:2013143129\n");printf("\n\t\t\t姓名:张朝翔");printf("\n\t程序作用:打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。

");printf("\n************************************\n");}➢主函数void main()通过for循环对字符串进行匹配,找到匹配的单词然后将copy的单词字符放入strTwo 数组中,不匹配的单词也放入数组strTwo中完成替换,最后把strTwo中的字符放回文件中完成操作。

数据结构串的应用及实现报告

数据结构串的应用及实现报告

实习报告课程名称: 数据结构实验名称: 串及其应用指导教师:学生班级:学生姓名:学生学号:完成日期:一、 需求分析1、本演示程序用C语言编写,实现串的堆分配存储基本操作、串的建立、串的输出、串的联接、求子串、串匹配、串的插入删除、串的替换等实现方法。

2、程序所达到的功能:(1) 建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk”(2) 复制串t到t1,并输出t1的长度(3) 在串s的第9个字符位置插入串s1而产生串s2,并输出s2(4) 删除s第2个字符开始的5个字符而产生串s3,并输出s3(5) 将串s第2个字符开始的3个字符替换成串s1而产生串s4,并输出s4(6) 提取串s的第8个字符开始的4个字符而产生串s5,并输出s5(7) 将串s1和串t连接起来而产生串s6,并输出s6(8) 比较串s1和s5是否相等,输出结果二、 概要设计1、编写栈的基本操作函数链串类型定义如下所示:typedef struct snode{char data;struct snode *next;}listring;(1)串赋值 Assign(s,t)将一个字符串常量赋给串s,即生成一个其值等于t的串s(2)串复制 StrCopy(s,t)将串t赋给串s(3)计算串长度 StrLength(s)返回串s中字符个数(4)判断串相等StrEqual(s,t)若两个串s与t相等则返回1;否则返回0。

(5)串连接 Concat(s,t)返回由两个串s和t连接在一起形成的新串。

(6)求子串 SubStr(s,i,j)返回串s中从第i(1≤i≤StrLength(s))个字符开始的、由连续j个字符组成的子串。

(7)插入InsStr (s,i,t)将串t插入到串s的第i(1≤i≤StrLength(s)+1)个字符中,即将t的第一个字符作为s的第i个字符,并返回产生的新串(8)串删除 DelStr (s,i,j)从串s中删去从第i(1≤i≤StrLength(s))个字符开始的长度为j的子串,并返回产生的新串。

数据结构课程设计(串的查找与替换源代码)

数据结构课程设计(串的查找与替换源代码)
{
j++;
k++;
}
if(findString[k]=='\0')
return i; //比较结束,返回欲查找的最后一个字符匹配的位置
}
return -1;
}
//从指定的下标开始插入target数组的元素
void Insert(char source[],int index,char target[]) //source[]用来存储源字符串String,target[]用于存储欲替换的字符串,index是开始找到的位置
{
int pos,b=0;
printf("输入被ห้องสมุดไป่ตู้换的字符串:");
scanf("%s",&findString);
printf("输入要替换的字符串(且保证其长度与被替换字符串一致):");
scanf("%s",&replaceString);
do
{
{
String[b]=String[b+strlen(findString)];
b++;
}
String[b]='\0';
Insert(String,pos,replaceString);
}
pos=FindString();
break;
case 4:
Save();
exit(0);
default:
printf("\n输入错误!\n");
printf("按任意键返回....\n");

数据结构——串实践报告

数据结构——串实践报告

成绩:实验报告课程名称:数据结构实践课实验项目:定长串存储方法姓名:专业:班级:学号:计算机科学与技术学院实验教学中心2017 年9月23日哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告实验项目名称:串的定长存储表示方法一、实践目的:1.熟练掌握串的定长顺序存储表示方法。

2.利用串的基本操作实现相关算法。

二、实践内容:1.实现串的定长顺序存储表示的基本操作。

并用主程序进行多次验证。

2.设 s='abcdefghijk'、t='cde'为两个字符串,利用定长顺序存储结构的串操作,判断 t 是否为 s 的子串。

如果是,输出子串所在位置(第一个字符)。

编程实现。

3.已知三个字符串分别为 s=’ababababcaabcbcaaaaaa’,s1=’caab’, s2=’bcb ’。

利用所学字符串基本运算的函数得到结果串为: s3= ’caabcbcaaaaaacaaaaaa’。

编程实现。

三、实验用设备仪器及材料计算机四、实验原理及接线五、实验操作步骤//main4-1.cpp 检验 bo4-1.cpp 的主程序//c1.h ( 程序名 )#include<string.h>#include<ctype.h>#include<malloc.h> // malloc()等#include<limits.h> // INT_MAX 等#include<stdio.h> // EOF(=^Z或 F6),NULL#include<stdlib.h> // atoi()#include<io.h> // eof()哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告#include<math.h> // floor(),ceil(),abs()#include<process.h> // exit()//#include<iostream.h> // cout,cin//函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1// #define OVERFLOW -2因为在 math.h 中已定义 OVERFLOW的值为 3,故去掉此行OK 等typedef int Status; // Status 是函数的类型 ,其值是函数结果状态代码,如typedef int Boolean; // Boolean 是布尔类型 ,其值是 TRUE或 FALSE//c4-1.h 串的定长顺序存储表示#define MAXSTRLEN 30 //用户可在 255 以内定义最大串长( 1 个字节)typedef char SString[MAXSTRLEN+1]; // 0号单元存放串的长度// bo4-1.cpp 串采用定长顺序存储结构 (由 c4-1.h 定义 )的基本操作 (14 个) //SString 是数组,故不需引用类型。

串的查找和替换

串的查找和替换

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一一年一月二十日课程设计任务书及成绩评定课题名称串的查找和替换Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求:设计内容:问题描述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。

内容要求:1.根据题目要求进行需求分析,分析出该项任务的主要功能和设计重点。

2.根据需求分析的内容划分模块3.利用VC++软件进行程序设计并调试通过4.写出课程设计说明书Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (8)第六章总结与心得 (11)参考文献 (12)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

用C++语言解决串的查找和替换问题课程设计报告

用C++语言解决串的查找和替换问题课程设计报告

用C++语言解决串的查找和替换问题摘要本课程设计主要解决的在一篇英语文章中,在文章中找出所指定的单词,然后对所指定的单词进行替换,替换为另一个单词,再存盘的课程设计。

先建立一个文件,然后从文件中读取字符串保存到数组中。

从键盘输入被替换的单词,然后删除这个单词。

从键盘中输入替换的单词,把它插入到被删除的单词的位置。

然后把该字符串再写入到文件中。

程序通过调试运行,初步实现了设计目标。

关键词程序设计;C++;替换;字符串目录1. 引言 (1)2. 课程设计目的和要求 (2)2.1 课程设计目的 (2)2.2 课程设计要求 (2)3. 课程设计分析 (3)3.1课程设计思路 (3)3.2课程设计要求函数分析 (3)3.3课程设计主要流程 (4)4. 课程设计调试 (6)5. 课程设计总结 (9)参考文献 (10)附录 (11)1 引言数据结构是一门理论性强,思维抽象,难度较大的一门课程。

是基础课专业课之间的桥梁。

该课程的先行课时计算机基础,程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。

通过本门课程的学习,我们应该透彻的理解各种数据的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后学习和工作有着重要的影响。

[1]数据结构是计算机科学与技术的一门核心专业基础课程,在该专业课程中有着承上启下的作用,学习好数据结构对于提高理论认知水平和实践操作能力有重要的作用,学习数据结构的最终目的是为了获得解决求解问题的能力。

对于现实世界的问题,应该从中抽象出一个适当的数学模型,该数学模型在计算机的用数构表示出来,然后在设计一个求数学模型的的算法,再进行编程调试,最后获得问题的解答。

数据课程设计着眼培养我们实践能力,加强编程能力的培养。

第1页2 课程设计目的和要求2.1 课程设计目的通过课程设计的题目练习,强化对所学知识的掌握及对问题分析和任务定义的理解,对题目做了相应的逻辑分析和数据结构的选择通过对任务的分析,为操作对象定义相应的数据结构,一过程化程序设计的思想原则划分各个模块,定义数据的抽象数据类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长沙理工大学《数据结构》课程设计报告黄博学院计算机与通信工程专业计算机科学与技术班级计算机0903班学号************ 学生姓名黄博指导教师陈倩诒课程成绩完成日期2011年7月3日课程设计成绩评定学院城南学院专业计算机科技与技术班级计算机科学与技术学号200986250311 学生姓名黄博指导教师陈倩诒完成日期2011年7月3日指导教师对学生在课程设计中的评价指导教师对课程设计的评定意见课程设计任务书城南学院计算机科学与技术专业用C++语言解决串的查找和替换问题学生姓名:黄博指导老师:陈倩诒摘要本课程设计主要解决的在一篇英语文章中,在文章中找出所指定的单词,然后对所指定的单词进行替换,替换为另一个单词,再存盘的课程设计。

先建立一个文件,然后从文件中读取字符串保存到数组中。

从键盘输入被替换的单词,然后删除这个单词。

从键盘中输入替换的单词,把它插入到被删除的单词的位置。

然后把该字符串再写入到文件中。

程序通过调试运行,初步实现了设计目标。

关键词程序设计;C++;替换;字符串目录1. 引言 (1)2. 课程设计目的和要求 (2)2.1 课程设计目的 (2)2.2 课程设计要求 (2)3. 课程设计分析 (3)3.1课程设计思路 (3)3.2课程设计要求函数分析 (3)3.3课程设计主要流程 (4)4. 课程设计调试 (6)5. 课程设计总结 (9)参考文献 (10)附录 (11)1 引言数据结构是一门理论性强,思维抽象,难度较大的一门课程。

是基础课专业课之间的桥梁。

该课程的先行课时计算机基础,程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。

通过本门课程的学习,我们应该透彻的理解各种数据的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后学习和工作有着重要的影响。

[1]数据结构是计算机科学与技术的一门核心专业基础课程,在该专业课程中有着承上启下的作用,学习好数据结构对于提高理论认知水平和实践操作能力有重要的作用,学习数据结构的最终目的是为了获得解决求解问题的能力。

对于现实世界的问题,应该从中抽象出一个适当的数学模型,该数学模型在计算机的用数构表示出来,然后在设计一个求数学模型的的算法,再进行编程调试,最后获得问题的解答。

数据课程设计着眼培养我们实践能力,加强编程能力的培养。

第1页2 课程设计目的和要求2.1 课程设计目的通过课程设计的题目练习,强化对所学知识的掌握及对问题分析和任务定义的理解,对题目做了相应的逻辑分析和数据结构的选择通过对任务的分析,为操作对象定义相应的数据结构,一过程化程序设计的思想原则划分各个模块,定义数据的抽象数据类型。

分模块对题目进行设计,强化对C++语言的掌握和对数据结构选择及掌握。

通过程序的编译掌握对程序的调试及思想,并且学习一些编程的技巧。

养成良好的编程习惯。

[2]以及让学生对书本的上的知识进行实践。

算法和数据结构是计算机科学与技术专业综合的专业基础课。

它不仅是计算机学科的核心课程,而且成为其他理工专业的热门选修课。

它又是操作系统、编译原理、数据库原理、算法分析、人工智能、图像处理等专业课程的前导课。

具有承上启下的作用。

数据结构的研究不仅设计到计算机硬件的研究方面,而且与计算机软件研究有着密切的关系。

计算机科学各领域都要用到数据构,该课程的目的就是介绍一些常用的数据结构,阐明数据结构的内在逻辑关系,讨论它们计算机内的储存表示,并结合各种典型它们在进行各种运算时的动态性质和实际的执行算法。

2.2 课程设计要求1.问题分析和任务的定义对问题的描述应避免具体的算法和涉及的数据结构,它是对要完成的任务明确的回答,强调是做什么,而不是怎么做。

2.详细的设计及编码算法的描述与代码的编写。

3.上机调试源程序的输入及代码的调试。

第2页3 课程设计分析3.1 课程设计思路先建立一个文件,然后从文件中读取字符串保存到数组中。

从键盘输入被替换的单词,然后删除这个单词。

从键盘中输入替换的单词,把它插入到被删除的单词的位置。

然后把该字符串再写入到文件中。

计算机上的非数值处理的对象基本上上字符串数据,字符串一般简称为串。

串(string)是由零个或多个字符组成的有限序列,一般记为s=`a1a2…an`(n大于零)。

通常称字符在序列中的序号为该字符在串中的位置,子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。

当两个串的每个字符都相等时(串值相等),称这两个串是相等的。

[3]在子串的查找定位过程中,分别利用计数指针j和k指示被替换串和替换串中当前正待比较的字符位置。

所用算法的基本思想是:首先利用指针i来完成被替换串和替换串在文本中的遍历,从被替换串和替换串的第一个字符起进行比较,若相等则继续逐个比较后续字符;否则完成一次比较,指针i递增进行下一次的比较。

以此类推,直至匹配成功[4]。

3.2 课程设计主要函数分析本设计所采用的数据结构char String[65535]; //长度要大于输入文本文件的长度!char findString[50]; //输入的要查找的字符char replaceString[50]; //输入的替换后的string.程序中各部分功能函数:void InitStr()/*从文件初始化数组*/;void InputReplaceChar()/*输入要替换的字符串*/;int FindString()/*查找第一个出现要查找字符的下标*/;void FindStrings()/*查看文章中共有多少个要查找的字符*/;void Insert(char source[],int index,char target[])/*从指定的下标开始插入target数组第3页中的元素*/;void Replace()/*将String 中要替换的内容替换掉*/; void Save()/*保存修改后的文章信息*/; void Menu()/*程序主菜单*/。

3.3 课程设计主要流程首先利用标准库函数fopen()打开一个文件,然后从文件中读取字符串保存到数组中,完成文件的读入。

其次,根据键盘输入的选择命令(数字1~4)程序调用不同功能模块来完成相应的操作。

[5] 程序中用户选择命令(数字1~4)设置: “1”:文本文件显示; “2”:子串查找; “3”:子串替换; “4”:退出整个程序。

程序设计流程图如图3.1所示:开始结束命令输入“1”回车键返回菜单子串替换子串查找退出程序回车键返回菜单文本文件显示“4”“3”“2”回车键返回菜单是是是否是否否否图3.1 设计流程图第4页程序运行后显示主菜单,提示用户根据需要选择不同的命令操作。

程序根据键盘输入的选择命令(数字1~4)调用不同功能模块来完成相应的操作。

如果用户输入的命令是“1”,主函数调用InitStr()函数从文件进行初始化数组,利用标准输入函数将该数组输出到标准输出上;如果用户输入的命令是“2”,主函数调用FindStrings()函数查找匹配的字符串并连同匹配的字符串个数一并输出到标准输出上;如果用户输入的命令是“3”,主函数调用Replace()函数,将String中要替换的内容替换掉;如果用户输入的命令是“4”,程序自动退出。

第5页4课程设计调试程序的开发与调试均在Microsoft Visual C++环境下进行。

首先程序运行后显示程序的主菜单,主菜单命令选择设置“1”:文本文件显示;“2”:子串查找;“3”:子串替换;“4”:退出整个程序。

程序根据用户输入的命令(数字1~4)进行相应的操作输入命令一后程序的运行结果:显示文本文件的内容。

如图4.1图4.1程序命令一的运行结果输入命令二后程序的运行结果:选择命令二,进行字符串的查找测试。

从图 4.3中可以看到查找后的结果。

图中显示出查找到的字符串getchar的数量为3个,并显示查找成功等信息。

如图4.2 图4.3第6页图4.2程序命令二字符串查找图4.3程序命令二字符串查找再次输入命令三后程序的运行结果:选择命令三,进行字符串的替换测试。

从图4.4中可以看到替换后的结果。

图中显示出被替换的字符串getchar和替换后的字符串charget,并显示替换成功等信息第7页图4.4程序命令三字符串替换图4.5程序命令三字符串替换再次输入命令一查看命令三是否真正替换成功:从图4.5中可以看到替换后的结果,鼠标箭头所指的方向看以看到原先文本文件(对比前面的程序测试图)中最后一行(当然,先前是查找到三个,这里只以最后一行容易观察到的来进行说明)的getchar()已经被替换成了charget(),说明程序替换成功,并将替换后的文本文件进行了保存。

第8页5课程设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节。

数据结构是程序设计的基本算法,经过这次数据结构的课程设计对于实际应用数据结构有很大帮助,尤其是对于串的学习上。

在数据结构课程的学习及其课程设计中要感谢陈老师的悉心教导,为我细心的指出错误。

第9页参考文献[1]谭浩强.C++程序设计.北京:清华大学出版社.2004[2]王晓东.计算机算法与分析.北京:电子工业出版社.2006[3]徐孝凯. C++语言基础教程. 北京:清华大学出版社.2002[4]9.Esakov J, Weiss T. Data Structures:An Advanced Approach UsingC.Prentice-Hall,Inc.,1989年[5]晋良颍.《数据结构》.人民邮电出版社.2002第10页附录:源程序:#include<stdio.h>#include<stdlib.h>#include<string.h>FILE* fp;char String[65535]; //长度要大于输入文本文件的长度!char findString[50]; //输入的要查找的字符char replaceString[50]; //输入的替换后的stringvoid InitStr(){/*从文件初始化数组*/int i=0;fp=fopen("test.txt","r");//打开文件,文件在当前目录下r-read onlywhile(!feof(fp)){String[i]=fgetc(fp);//int fgetc( FILE *stream );i++; //Read a character from a stream.}String[--i]='\0';//添加结束标志fclose(fp);}void InputReplaceChar(){ /*输入要替换的字符串*/printf("输入被替换的字符串:");scanf("%s",findString);printf("输入要替换的字符串:");scanf("%s",replaceString);}int FindString(){/*查找第一个出现要查找字符的下标*/int i,j,k;for(i=0;i<strlen(String);i++){j=i;k=0;while((String[j]==findString[k]) && (findString[k]!='\0')&& (String[j]!='\0')){ //当前比较的两个字符相等,并且主/模式串都为结束,继续下一个的比较第11 页j++;k++;}if(findString[k]=='\0')return i;//返回的是最后的匹配位置}return -1;}void FindStrings(){/*查看文章中共有多少个要查找的字符*/int i,j,k,all=0;printf("输入要查找的字符串:");scanf("%s",findString);for(i=0; i < strlen(String); i++){j=i;k=0;while((String[j]==findString[k]) && (findString[k]!='\0') && (String[j]!='\0')) {//当前比较的两个字符相等,并且主/模式串都为结束,继续下一个的比较j++;k++;}if(findString[k]=='\0')all++;//记录匹配的字符串的个数}printf("查找成功!\n");printf("共查找到%d 个%s",all,findString);printf("\n按任意键返回.....\n");}void Insert(char source[],int index,char target[]){/*从指定的下标开始插入target数组中的元素*///Insert(String,pos,replaceString);int i,j,k,m;j=strlen(target);//计算串target的长度,存入jk=strlen(source);source[j+k]='\0';// string 串以'\0'结束i=j+k-1;//减1后为实际长度m=k-1;while(m >= index)//index 为pos,pos是找到的位置{source[i]=source[m];i--;m--;} 第12页i=index; //index 为pos,pos是找到的位置m=0;while(m<j){source[i]=target[m];i++;m++;}}void Replace(){/*将String中要替换的内容替换掉*/int pos,b=0;InputReplaceChar();do{pos=FindString();//FindString()--return i;返回的是最后的匹配位置b=pos; //FindString()未找到时返回的是-1,故判断b==-1if(b==-1){printf("查找内容不存在!\n");return;}else{while(String[b+strlen(findString)]!='\0'){String[b]=String[b+strlen(findString)];b++;}String[b]='\0';//字符串添加结束符Insert(String,pos,replaceString);}pos=FindString();}while(pos!=-1);printf("替换成功!\n");printf("\n按任意键返回.....\n");getchar();}void Save(){ /*保存修改后的文章信息*/int i=0;FILE *fp; 第13页fp=fopen("test.txt","w");while(i < strlen(String)){fputc(String[i],fp);//int fputc( int c, FILE *stream );i++; //Writes a character to a stream .}}void Menu(){//程序主菜单实现printf("----------------\n");printf("-----程序主菜单------\n");printf("----------------\n");printf("----1 文本文件显示-----\n");printf("----2 子串查找-------\n");printf("----3 子串替换-------\n");printf("----4 退出整个程序-----\n");printf("----回车键返回菜单-----\n");printf("----------------\n");printf("----请选择:(1-4)-:");}void main(){//程序主函数部分,完成各功能函数的调用,程序的入口char menuNum;InitStr();while(1){Menu();scanf("%d",&menuNum);switch(menuNum){case 1: //"1":文本文件显示;printf("%s\n",String);getchar();break;case 2:// "2":子串查找FindStrings();break;case 3:// "3":子串替换Replace();break;case 4:// "4":退出整个程序第14页Save();exit(0);default:printf("\n输入错误!\n");printf("按任意键返回.....\n");getchar();} } }第15页。

相关文档
最新文档