《数据结构》实验三【 串的基本操作】
数据结构3-串及其应用.
实验3:串及其应用一、实验目的掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。
二、问题描述全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。
用户可完成对文本的插入、删除、修改等功能。
三、实验要求1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移至文件首、尾;光标移至本行首、尾。
2、实现基本编辑命令:I----在当前光标前插入内容,按ESC结束F----在当前光标后插入内容,按ESC结束D----删除光标所在行ND---删除光标位置开始的n行N-----删除光标上的字符W----将修改后的文本保存下来Q----退出编辑状态。
四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C++ 程序集成环境五、实验步骤1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。
2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。
3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区;4、操作确定后,将修改后的文本存到文件中。
六、测试数据自行设定。
七、实验报告要求实验报告应包括以下几个部分:1、问题描述;2、算法的设计描述;3、测试结果的分析与讨论。
4、设计与实现过程中的体会,进一步的改进设想。
5、实验总结。
八、思考题1、对命令格式非法等错误做严格检查和适当处理。
2、扩充编辑操作,如对某行进行串替换?。
实验三串基本操作的编程实现
实验三串基本操作的编程实现(共5页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--实验三串基本操作的编程实现【实验目的】内容:串基本操作的编程实现要求:串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】字符串用常规的顺序存储法来存储,实现常用的功能。
自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。
修改程序模式:将下面程序空白的地方填空。
程序检查模式:将本文件夹中的程序运行后总结相关功能。
【思考问题】1.字符串的顺序存储和链表存储的差异C语言中是如何实现字符串的2.在字符串处理方面主要有什么操作3.字符串的操作的主要特点是什么4.举出几个字符串的应用范例【参考代码】立顺序串(仅限单行的字符串,建议不用汉字。
)"<<endl;cout<<"2.显示串"<<endl;cout<<"3.修改串"<<endl;cout<<"4.插入串"<<endl;cout<<"5.删除串"<<endl;cout<<"6.查找串"<<endl;cout<<"7.求串长度"<<endl;cout<<"8.结束程序"<<endl;cout<<"=========="<<endl;}int main(){int flag=0,returnvalue,position,beginposition,endposition,length;char choice,choose,newstr[maxsize];string newstring;menu();while(1){cout<<"请输入选择:";cin>>choice;switch(choice){case '1':if(flag){cout<<"数据已存在,是否覆盖(y/n)";cin>>choose;if(choose=='N'||choose=='n'){cout<<"数据没有发生更改!"<<endl;break;}if(choose=='Y'||choose=='y'){returnvalue=();if(returnvalue==success)cout<<"创建成功!"<<endl;flag=1;}elsecout<<"输入错误!"<<endl;}else{returnvalue=();if(returnvalue==success)cout<<"创建成功!"<<endl;flag=1;}break;case '2':if(flag==0)cout<<"请先建立串!"<<endl;else();break;case '3':if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要修改的初始位置:";cin>>beginposition;cout<<"请输入要修改的终止位置:";cin>>endposition;cout<<"请输入修改后的字符串:";cin>>newstr;returnvalue=(beginposition,endposition,newstr);if(returnvalue==success){cout<<"修改成功!"<<endl;();}if(returnvalue==overflow){cout<<"字符串的最大长度为"<<maxsize<<endl;cout<<"发生溢出,操作失败!"<<endl;}if(returnvalue==range_error)cout<<"位置错误,操作失败!"<<endl;if(returnvalue==empty)cout<<"字符串为空,操作失败!"<<endl;}break;case '4':if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要插入的位置:";cin>>position;cout<<"请输入要插入的字符串:";cin>>newstr;length=strlen(newstr);returnvalue=(position,newstr,length);if(returnvalue==success){cout<<"插入成功!"<<endl;();}if(returnvalue==overflow){cout<<"字符串的最大长度为"<<maxsize<<endl;cout<<"发生溢出,操作失败!"<<endl;}if(returnvalue==range_error)cout<<"位置错误,操作失败!"<<endl;}break;case '5':if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要删除的初始位置:";cin>>beginposition;cout<<"请输入要删除的终止位置:";cin>>endposition;returnvalue=(beginposition,endposition);if(returnvalue==success){cout<<"删除成功!"<<endl;();}if(returnvalue==range_error)cout<<"位置错误,操作失败!"<<endl;if(returnvalue==empty)cout<<"字符串为空,操作失败!"<<endl;}break;case '6':if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要查找的字符串:";cin>>newstr;position=(newstr);if(position>0){cout<<"已找到!"<<endl;cout<<"字符串出现的初始位置为:"<<position<<endl;}if(position==0)cout<<"您要查找的字符串不存在!"<<endl;if(position==-1)cout<<"字符串为空,操作失败!"<<endl;}break;case '7':if(flag==0)cout<<"请先建立串!"<<endl;else{();length=();cout<<"当前串的长度为:"<<length<<endl;}break;case '8':exit(0);break;default:cout<<"输入错误!\n";break;}cout<<"按任意键继续......"<<endl;getch();system("cls");menu();}getch();return 0; }。
实验三串基本操作的编程实现
实验三串基本操作的编程实现引言:串是由零个或多个字符组成的有限序列,是一种非常基础也非常重要的数据结构。
在本实验中,我们将学习串的基本操作,并使用C语言来实现这些操作。
1.实验目的:-掌握串的基本操作,包括串的初始化、判空、求长度、复制和拼接等操作;-学会使用C语言编程实现串的基本操作。
2.实验内容:本实验主要包括以下几个串的基本操作的编程实现。
2.1串的初始化操作在C语言中,我们可以使用字符数组来表示一个串。
以下是一个串的初始化操作的实现代码:```c#include <stdio.h>void InitString(char s[], char str[])int i;for (i = 0; str[i] != '\0'; i++)s[i] = str[i];}s[i]='\0';int maichar s[20];char str[] = "Hello, World!";InitString(s, str);printf("Initialized string: %s\n", s);return 0;```2.2串的判空操作判空操作即判断一个串是否为空串。
如果一个串的长度为0,则表示该串为空串。
以下是一个判空操作的实现代码示例:```c#include <stdio.h>#include <stdbool.h>bool IsEmptyString(char s[])return s[0] == '\0';int maichar s[20] = ""; // 空串if (IsEmptyString(s))printf("The string is empty.\n");} elseprintf("The string is not empty.\n");}return 0;```2.3串的长度操作求串的长度,即求一个串中字符的个数。
数据结构顺序串基本操作实验报告
数据结构顺序串基本操作实验报告实验目的:1.掌握顺序串的定义和基本操作;2.掌握顺序串的插入、删除、查找等基本操作。
实验内容:实现顺序串的基本操作,包括串的初始化、插入、删除、查找、输出等操作,并通过实例测试验证操作的正确性。
实验原理:顺序串是一种以连续的存储空间来存储字符序列的数据结构。
在顺序串中,字符串的字符元素依次存储在一组连续的存储单元中,可以通过下标来访问和修改元素。
顺序串的基本操作包括初始化、插入、删除、查找等。
1.串的初始化:初始化一个空串,即将串的长度设置为0。
2.串的插入:在指定位置插入一个字符或字符串。
首先需要判断插入位置的合法性,即位置不能超过当前串的长度,并将插入位置后的元素后移一位,然后将要插入的元素放入指定位置。
3.串的删除:删除指定位置的字符或字符串。
首先需要判断删除位置的合法性,即位置不能超过当前串的长度,然后将删除位置后的元素前移一位。
4.串的查找:在串中查找指定字符或子串第一次出现的位置。
遍历串中的每个元素,检查是否与要查找的字符或子串相等,若相等则返回其位置。
5.串的输出:将串中的元素打印出来。
实验步骤:1.定义顺序串的数据结构。
使用数组来存储字符序列,并定义一个变量用于记录串的长度。
2.初始化一个空串。
将串的长度设置为0。
3.实现插入操作。
根据插入位置的合法性,判断是否需要进行插入操作。
如果插入位置超过了当前串的长度,则将元素插入到串末尾;否则,将插入位置后的元素后移一位,并将要插入的元素放入指定位置。
4.实现删除操作。
根据删除位置的合法性,判断是否需要进行删除操作。
如果删除位置超过了当前串的长度,则无需删除;否则,将删除位置后的元素前移一位。
5.实现查找操作。
遍历串中的每个元素,检查是否与要查找的字符或子串相等,若相等则返回其位置。
6.实现输出操作。
遍历串中的每个元素,将其打印出来。
7.构造测试实例,并进行验证。
实验结果:以插入、删除、查找等操作为例,构造测试实例进行验证:假设有一个空串,插入字符'A'到位置0:结果为"A";在串的末尾插入字符'B':结果为"AB";在位置1插入字符'C':结果为"ACB";删除位置3的字符:结果为"AC";查找字符'C'的位置:结果为1实验总结:本次实验主要是对顺序串的基本操作进行了实现和验证。
实验三 串基本操作的编程实现
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY Array
数据结构
实验三串基本操作的编程实现
【实验目的】
内容:串基本操作的编程实现
要求:
串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验性质】
验证性实验(学时数:2H)
【实验内容】
字符串长度计算,字符串的连接,字符串的替换,求子串等。
【注意事项】
1.开发语言:使用C。
2.可以自己增加其他功能。
【实验分析、说明过程】
【思考问题】
【实验小结】 (总结本次实验的重难点及心得、体会、收获)。
串的基本操作
StSs 莎匣的唯个宇符,長度歹Go ocl bye TGood LucJkf ■■石:■ 串七为:Cond bye f hyp f Cnnrl lurk! 三己符咅”串七为=b^ef b^ef Good luck!串的基本操作一、 实验目的、意义(1) 理解串的堆分配存储结构。
(2) 理解用它们表示时插入,生成串,联接串与求子串的算法。
(3) 根据具体问题的需要,能够设计出相关算法。
二、 实验内容及要求说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输 入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修 改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。
具体要求:定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串三、实验所涉及的知识点C 语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接 串与求子串的算法。
四、实验结果及分析(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图 方式给出。
) "E 儿敛為洁也试強Qe b extl. eweSt^): God b9E*串主否?旅“空0:5>邑七为:□峥单岬和孤相司的子早用串s 代替后,串如Good b^ef Good Luckf 舉皿青年后J 赴 宅s 为从岀屮的第I 复制吕七为串:God huefGod luch?Ss 7J i Cud luck?五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。
)调试程序时,出现了许多错误。
如:串的堆分配存储结构、串的联接等。
另外还有一些语法上的错误。
由于对所学知识点概念模糊,试验课上未能完成此次上机作业。
后来经过查阅教材,浏览网页等方式,才完成试验。
这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。
以后要都去练习、实践,以完善自己的不足。
串-数据结构实验报告
串-数据结构实验报告串数据结构实验报告一、实验目的本次实验的主要目的是深入理解和掌握串这种数据结构的基本概念、存储方式以及相关的操作算法。
通过实际编程实现串的基本操作,提高对数据结构的理解和编程能力,培养解决实际问题的思维和方法。
二、实验环境本次实验使用的编程语言为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)理解用它们表示时插入,生成串,联接串与求子串得算法。
(3)根据具体问题得需要,能够设计出相关算法。
二、实验内容及要求说明1:学生在上机实验时,需要自己设计出所涉及到得函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应得输出作出分析;修改输入数据,预期输出并验证输出得结果,加深对有关算法得理解。
具体要求:定义串得堆分配存储,完成串得基本操作:插入,生成串,联接串,求子串等。
三、实验所涉及得知识点C语言算法、循环算法、串得堆分配存储结构、插入,生成串,联接串与求子串得算法。
四、实验结果及分析(所输入得数据及相应得运行结果,运行结果要有提示信息,运行结果采用截图方式给出。
)五、总结与体会(调试程序得心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。
)调试程序时,出现了许多错误、如:串得堆分配存储结构、串得联接等。
另外还有一些语法上得错误。
由于对所学知识点概念模糊,试验课上未能完成此次上机作业。
后来经过查阅教材,浏览网页等方式,才完成试验。
这次试验出现错误最重要得原因就就是对课本知识点理解不深刻以及编写代码时得粗心。
以后要都去练习、实践,以完善自己得不足。
六、程序清单(包含注释)#include 〈stdio、h>#include 〈malloc。
h〉#include <stdlib。
h〉typedef char Status;int strlen(char *p){inti=0;while(*p++)i++;return i;}typedef struct{ﻩchar *ch;ﻩ// 若就是非空串,则按串长分配存储区,否则ch为NULLint length; // 串长度}HString;// 初始化(产生空串)字符串Tvoid InitString(HString *T){(*T)。
length=0;ﻩ(*T)、ch=NULL;}//生成一个其值等于串常量chars得串TStatus StrAssign(HString *T, char *chars){ﻩint i,j;if((*T)。
数据结构-顺序串基本操作实验报告
数据结构\顺序串基本操作实验报告实验报告数据结构\顺序串基本操作一、实验目的本实验旨在通过实践,掌握顺序串的基本操作,包括顺序串的初始化、销毁、插入、删除和查找等。
二、实验内容1\初始化顺序串2\销毁顺序串3\插入元素到顺序串4\删除顺序串中的指定元素5\查找顺序串中的指定元素三、实验步骤1\初始化顺序串顺序串的初始化就是创建一个空顺序串,可以通过创建一个定长数组来实现。
具体步骤如下:(1)定义一个定长数组,例如a[MAX_SIZE],用于存储顺序串的元素。
(2)定义一个变量len,用于记录顺序串的当前长度,初值为0。
2\销毁顺序串销毁顺序串就是释放顺序串占用的内存空间,具体步骤如下:(1)释放数组a所占用的内存空间。
(2)将len重置为0。
3\插入元素到顺序串插入元素到顺序串就是在指定位置插入一个元素。
具体步骤如下:(1)判断插入位置的合法性,如果位置小于0或大于当前顺序串的长度,即为非法操作。
(2)将len加1,表示顺序串的长度增加了一个。
(3)将插入位置及其之后的元素依次后移一位。
(4)将需要插入的元素存放到插入位置处。
4\删除顺序串中的指定元素删除顺序串中的指定元素就是将顺序串中某个位置的元素删除。
具体步骤如下:(1)判断被删除位置的合法性,如果位置小于0或大于等于当前顺序串的长度,即为非法操作。
(2)将被删除位置之后的元素依次前移一位。
(3)将len减1,表示顺序串的长度减少了一个。
5\查找顺序串中的指定元素查找顺序串中的指定元素就是找出顺序串中第一个与给定元素相等的元素的位置。
具体步骤如下:(1)从顺序串的第一个元素开始逐个与给定元素比较,直到找到相等的元素或搜索到顺序串的末尾。
(2)返回相等元素的位置。
四、实验结果与分析根据实验步骤,我们可以完成顺序串的初始化、销毁、插入、删除和查找等基本操作。
通过这些操作,我们可以对顺序串进行各种元素的插入、删除和查找操作,方便实现顺序串的各种功能。
实验三串基本操作的编程实现
实验三-串基本操作的编程实现一、实验目的本实验旨在深入理解和掌握串(字符串)的基本操作,包括串的创建、拼接、比较、子串查找等,并通过编程实现这些操作来加深对理论知识的理解。
二、实验内容1.串的创建与拼接2.串的比较3.子串的查找三、实验步骤与实现1.串的创建与拼接在Python中,我们可以使用字符串来创建串。
字符串是不可变的,这意味着我们不能改变字符串中的字符,但我们可以创建一个新的字符串。
拼接两个字符串可以通过加号(+)来实现。
# 串的创建str1 = "Hello"str2 = "World"# 串的拼接str3 = str1 + " " + str2print(str3) # 输出:Hello World2.串的比较在Python中,我们可以使用比较运算符(如==、<、>)来比较两个字符串。
字符串的比较是基于字符的ASCII值来进行的。
# 串的比较str1 = "Hello"str2 = "World"# 比较两个串是否相等if str1 == str2:print("两个串相等")else:print("两个串不相等") # 输出:两个串不相等3.子串的查找在Python中,我们可以使用find方法来查找一个字符串是否包含另一个字符串。
如果找到了子串,它将返回子串在主串中第一次出现的位置的索引;如果没有找到,它将返回-1。
# 子串的查找str1 = "Hello, world!"str2 = "world"# 查找子串的位置index = str1.find(str2)if index != -1:print("子串在主串中的位置是:", index) # 输出:子串在主串中的位置是: 7else:print("没有找到子串")四、实验总结与思考通过本次实验,我们了解了如何使用Python来实现串的基本操作。
实验三实验报告——串
数据结构实验报告报告名称串的操作专业网络工程班级1001学号姓名指导教师2012年5月8日一、实验目的:熟悉串类型的实现方法,了解简单文字处理的设计方法。
二、实验内容与基本要求: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)定义串的顺序存取结构。
(2)分别定义串的联接和子串定位的基本操作。
(3)设计一个测试主函数进行测试。
【测试数据】有两个串,分别为s1=‘ababbaabaa’,s2=‘aab’。
输出串s1与串s2联接的结果,以及在串s1中对串s2定位的结果。
二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)1)符号名说明s1,s2 分别定义为母串和字串的字符数组x,y 分别定义为全局变量,用来表示2个串的长度s3 表示连接完成的字符串k 表示定位的结果2)程序流程图三、源程序及注释:#include"stdio.h"#include"string.h"int x,y;int dingwei(char s1[],char s2[]);定位函数{ int i,j,k;i=0;j=0;while(i<x&&j<y);i,j分别来控制s1,s2数组中字符的位置{if(s1[i]==s2[j])如果二者相等,则比较2个数组的下一位{i++;j++;}else {i=i-j+1;j=0; };不相等j置数为0,i从i-j+1开始}if(s2[y-1]==s1[i-1]&&j==y) return i-j+1; 比较完后,输出比较结果else return 0;}int lianjie(char s1[],char s2[]){ int i,j,k;char s3[50];;定义一个数组来存放s1,s2连接后的字符串i=0;j=0;while(s1[i]!=0){ s3[i]=s1[i];i++; ;依次将s1中的字符串输入到s3中}while(s2[j]!=0){s3[i]=s2[j];将s2中的字符串紧接着传送到s3中i++;j++;}s3[i]=0;puts(s3);输出连接完成后的结果}int main(){char s1[50],s2[50];int i,j,k;printf("\t\t串的基本操作");printf("\n\t输入主字符串:");gets(s1);输入语句x=strlen(s1);计算s1的长度printf("\n\t输入子字符串:");gets(s2);y=strlen(s2);k=dingwei(s1,s2);调用定位函数printf("\n\t定位结果:");;输出定位结果if(k) printf("\t%d",k);else printf("不存在从属关系");printf("\n\t字符串相连:");lianjie(s1,s2);调用连接函数,将字符串连接getchar();}四、运行输出结果:五、调试和运行程序过程中产生的问题及采取的措施:这个程序要实现的要求相对而言是比较容易实现的;只要知道关于字符数组的一些基本操作指令,再结合for语句循环,应该能实现题目所要求的条件。
串的基本操作和简程序实验心得
串的基本操作包括:1. 创建串:使用字符串常量或字符数组来创建一个串。
2. 初始化串:将串中的所有元素设置为一个特定的值。
3. 拷贝串:将一个串的内容复制到另一个串中。
4. 连接串:将两个或多个串连接在一起,形成一个新的串。
5. 求串长度:返回串中元素的个数。
6. 判断子串:检查一个串是否包含在另一个串中。
7. 查找子串:在一个串中查找指定子串的位置。
8. 替换子串:将一个串中的某个子串替换为另一个子串。
9. 插入子串:在指定位置插入一个子串。
10. 删除子串:从指定位置开始,删除指定长度的子串。
11. 截取子串:从指定位置开始,截取指定长度的子串。
12. 逆置串:将串中的元素顺序颠倒。
13. 遍历串:访问串中的每个元素。
以下是一个简单的C语言程序,用于实现上述操作:```c#include <stdio.h>#include <string.h>#include <stdlib.h>void create_string(char *str, const char *s);void init_string(char *str, char c);void copy_string(char *dest, const char *src);void concatenate_strings(char *dest, const char *s1, const char *s2); int length_string(const char *str);int substring_exists(const char *str, const char *sub);int find_substring(const char *str, const char *sub);void replace_substring(char *str, const char *old, const char *new); void insert_substring(char *str, int pos, const char *sub);void delete_substring(char *str, int pos, int len);void substring(char *dest, const char *str, int pos, int len);void reverse_string(char *str);void traverse_string(const char *str);int main() {char str1[100], str2[100], result[200];int pos = 2;int len = 3;int found = -1;int index = -1;const char *old = "world";const char *new = "everyone";const char *sub = "hello";const char *s1 = "Hello, ";const char *s2 = "world!";create_string(str1, "Hello");create_string(str2, "world");init_string(result, '-');concatenate_strings(result, s1, s2);printf("Concatenated string: %s", result);printf("Length of string: %d", length_string(result));found = substring_exists(result, sub);printf("Substring exists: %d", found);index = find_substring(result, sub);printf("Substring index: %d", index);replace_substring(result, old, new);printf("Replaced string: %s", result);insert_substring(result, pos, sub);printf("Inserted string: %s", result);delete_substring(result, pos, len);printf("Deleted string: %s", result);substring(result, result + index + strlen(sub), pos, len);printf("Substring after deletion: %s", result);reverse_string(result);printf("Reversed string: %s", result);traverse_string(result);return 0;}```实验心得:通过这个简单的程序,我了解了串的基本操作和实现方法。
数据结构_串的基本操作_课程设计_实验报告
顾名思义,串及其基本操作,就是要在理解串的基本概念和特征的基础 上,了解串的内部表示和处理方法。这样才能有效地实现串的基本操作。串,也 还是字符串,是一种特殊的线性表。特殊之处在于表中的每一个元素都是字符, 以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有联接、求 串长、求子串、比较串的大小、串的插入、串的删除、子串的定位和置换。因为 所要进行的操作比较零散也比较多,所以就要用到多个函数把这个整体的课程设 计划分成多个模块来进行。每个函数对应一个功能。在主函数中,用一个菜单, 就可以将原来的已分模块的函数系统地进行检验及操作。在程序设计的过程中, 根据课程设计的目的和基本要求,注意一些容易出错的地方及问题。
printf("请输入两串字符串:");
scanf("%s%s",str1,str2);
if(strcmp(str1,str2)>0) printf("1");
2
循环下,输入一个数字。每个数字代表不同的功能。然后用一个 switch 语句,
不同的 case 对应不同的函数,如:case(0)就可以代表求字符串的串长。
数据结构串的基本操作及应用实验报告(常用版)
数据结构串的基本操作及应用实验报告(常用版)(可以直接使用,可编辑完整版资料,欢迎下载)实验日期2021.5.10 教师签字成绩实验报告【实验名称】第四章串的基本操作及应用【实验目的】1、熟悉将算法转换成程序代码的过程。
2、了解串的逻辑结构特性,熟练掌握串顺序存储结构的C 语言描述方法。
3、熟练掌握串的基本操作:求长度、串的连接、插入、删除等,掌握串的存取特性。
【实验原理】1.串可以可以有三种存储方式,分别为顺序存储、堆分配存储、链式存储,串的基本操作在这三种存储方式下操作。
2.串的模式匹配KMP算法在每一趟匹配过程中出现字符不等时,不需回溯指针,而是利用已经得到的部分匹配结果的结果将模式向右滑动尽可能远的一段距离,继续进行比较。
【实验内容】1.串的顺序存储表示及基本操作(插入、删除、求串长、合并连接串、求子串、串比较等)#include<stdio.h>#include<iostream.h>#include<malloc.h>#include<string.h>#define SIZE 20struct HString{char ch[SIZE];int length;};void StrInsert(HString &s,int pos,HString t){int i,j;if(pos<1||pos>s.length+1)cout<<"ERROR!";if(t.length){for(i=s.length-1;i>=pos-1;--i)s.ch[i+t.length]=s.ch[i];for(j=0;j<=t.length-1;j++)s.ch[pos-1+j]=t.ch[j];s.length+=t.length;}}void StrDelete(HString &s,int pos,int len){int i;int v=pos-1;if(pos<1||pos>s.length||len<0||len>s.length-pos+1)cout<<"ERROR!";for(i=pos+len-1;i<=s.length-1;i++)s.ch[v++]=s.ch[i];s.length-=len;}void StrAssign(HString &t,char chars[]){int i;char *c;for(i=0,c=chars;*c;++i,++c);if(!i){t.length=0;}else{for(int j=0;j<i;j++)t.ch[j]=chars[j];t.length=i;}}int StrLen(HString &s){return s.length;}int StrCompare(HString &s,HString t){for(int i=0;i<s.length&&i<t.length;i++){if(s.ch[i]!=t.ch[i])return (int)(t.ch[i]-s.ch[i]);}return s.length-t.length;}void Concat(HString &t,HString s1,HString s2){int i=s1.length+s2.length;for(i=0;i<s1.length;i++)t.ch[i]=s1.ch[i];t.length=s1.length+s2.length;for(i=s1.length;i<t.length;i++)t.ch[i]=s2.ch[i-s1.length];}int SubString(HString &sub,HString s,int pos,int len) {if(pos<1||pos>s.length||len<0||len>s.length-pos+1) {cout<<"ERROR!"<<endl;return 0;}if(!len){sub.length=0;}else{int i=len;for(i=0;i<len;i++)sub.ch[i]=s.ch[pos+i-1];sub.length=len;}}void Display(HString &t){for(int i=0;i<=t.length-1;i++)cout<<t.ch[i];cout<<endl;}void main(){int i;char s[20];do{cout<<"选择您要进行的串的基本操作:"<<endl;cout<<"1.插入"<<endl<<"2.删除"<<endl<<"3.串连结"<<endl<<"4.取子串"<<endl<<"5.串比较"<<endl<<"6.求串长"<<endl<<"7.结束"<<endl;cin>>i;switch(i){case 1:{HString s,t;int pos;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<endl;cout<<"请输入要插入的串t:";cin>>t.ch;StrAssign(t,t.ch);cout<<endl;cout<<"请输入你所要插入的位置:";cin>>pos;StrInsert(s,pos,t);cout<<"插入之后串变为:";Display(s);break;}case 2:{HString s;int pos,len;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<"请输入你所要删除串的首位置为:";cin>>pos;cout<<"请输入你需要删除的串的长度:";cin>>len;StrDelete(s,pos,len);cout<<"删除之后串变为:";Display(s);break;}case 3:{HString s1,s2,t;cout<<"请输入串s1:";cin>>s1.ch;StrAssign(s1,s1.ch);cout<<"请输入串s2:";cin>>s2.ch;StrAssign(s2,s2.ch);Concat(t,s1,s2);cout<<"s1与s2合并后的串为:";Display(t);break;}case 4:{HString sub,s;int pos,len;cout<<"请输入主串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<"请输入所取原串的起始位置pos:";cin>>pos;cout<<"请输入子串的长度len:";cin>>len;SubString(sub,s,pos,len);cout<<"取出的子串为:";Display(sub);break;}case 5:{HString s,t;int value;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);cout<<"请输入串t:";cin>>t.ch;StrAssign(t,t.ch);value=StrCompare(s,t);if(value>0) cout<<"串s大于串t"<<endl;else if(value==0) cout<<"串s等于串t"<<endl;else cout<<"串s小于串t"<<endl;cout<<endl;break;}case 6:HString s;char *chars;int val;cout<<"请输入串s:";cin>>s.ch;StrAssign(s,s.ch);val=StrLen(s);cout<<"串的长度为:"<<val<<endl;break;case 7:cout<<"操作结束!"<<endl;break;default:cout<<"输入错误!请重新输入!"<<endl;break;}}while(i!=7);}2.串的堆分配存储表示及基本操作(插入、删除、求串长、合并连接串、求子串、串比较等)#include<stdio.h>#include<iostream.h>#include<malloc.h>#include<string.h>struct HString{char *ch;int length;};void StrInsert(HString &s,int pos,HString t){int i,j;if(pos<1||pos>s.length+1)cout<<"ERROR!";if(t.length){s.ch=(char*)realloc(s.ch,(s.length+t.length)*sizeof(char));for(i=s.length-1;i>=pos-1;--i)s.ch[i+t.length]=s.ch[i];for(j=0;j<=t.length-1;j++)s.ch[pos-1+j]=t.ch[j];s.length+=t.length;}}void StrDelete(HString &s,int pos,int len){int i;int v=pos-1;if(pos<1||pos>s.length||len<0||len>s.length-pos+1)cout<<"ERROR!";for(i=pos+len-1;i<=s.length-1;i++)s.ch[v++]=s.ch[i];s.length-=len;}void StrAssign(HString &t,char *chars){int i;char *c;for(i=0,c=chars;*c;++i,++c);if(!i){t.ch=NULL;t.length=0;}else{t.ch=(char *)malloc(i*sizeof(char));for(int j=0;j<i;j++)t.ch[j]=chars[j];t.length=i;}}int StrLen(HString &s){return s.length;}int StrCompare(HString &s,HString t){for(int i=0;i<s.length&&i<t.length;i++){if(s.ch[i]!=t.ch[i])return (int)(t.ch[i]-s.ch[i]);}return s.length-t.length;}void Concat(HString &t,HString s1,HString s2){int i=s1.length+s2.length;t.ch=(char *)malloc(i*sizeof(char));for(i=0;i<s1.length;i++)t.ch[i]=s1.ch[i];t.length=s1.length+s2.length;for(i=s1.length;i<t.length;i++)t.ch[i]=s2.ch[i-s1.length];}int SubString(HString &sub,HString s,int pos,int len){if(pos<1||pos>s.length||len<0||len>s.length-pos+1){cout<<"ERROR!"<<endl;return 0;}if(!len){sub.ch=NULL;sub.length=0;}else{int i=len;sub.ch=(char *)malloc(i*sizeof(char));for(i=0;i<len;i++)sub.ch[i]=s.ch[pos+i-1];sub.length=len;}}void Display(HString &t){for(int i=0;i<=t.length-1;i++)cout<<t.ch[i];cout<<endl;}void main(){int i;char s[20];cout<<"选择您要进行的串的基本操作:"<<endl;do{cout<<"1.插入"<<endl<<"2.删除"<<endl<<"3.串连结"<<endl<<"4.取子串"<<endl<<"5.串比较"<<endl<<"6.求串长"<<endl<<"7.结束"<<endl;cin>>i;switch(i){case 1:{HString s,t;char a[20],b[20];char *sa,*sb;int pos;cout<<"请输入串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<endl;cout<<"请输入要插入的串t:";cin>>b;sb=b;StrAssign(t,sb);cout<<endl;cout<<"请输入你所要插入的位置:";cin>>pos;StrInsert(s,pos,t);cout<<"插入之后串变为:";Display(s);break;}case 2:{HString s;char str[20];char *chars;int pos,len;cout<<"请输入串s:";cin>>str;chars=str;StrAssign(s,chars);cout<<"请输入你所要删除串的首位置为:";cin>>pos;cout<<endl;cout<<"请输入你需要删除的串的长度:";cin>>len;cout<<endl;StrDelete(s,pos,len);cout<<"删除之后串变为:";Display(s);break;}case 3:{char a[20],b[20];char *sa,*sb;cout<<"请输入串s1:";cin>>a;sa=a;StrAssign(s1,sa);cout<<"请输入串s2:";cin>>b;sb=b;StrAssign(s2,sb);Concat(t,s1,s2);cout<<"s1与s2合并后:";Display(t);break;}case 4:{HString sub,s;char a[20];char *sa;int pos,len;cout<<"请输入主串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<"请输入所取原串的起始位置pos:";cin>>pos;cout<<"请输入子串的长度len:";cin>>len;SubString(sub,s,pos,len);cout<<"该子串为:";Display(sub);break;}case 5:{HString s,t;int value;char a[20],b[20];char *sa,*sb;cout<<"请输入串s:";cin>>a;sa=a;cout<<"请输入串t:";cin>>b;sb=b;StrAssign(t,sb);value=StrCompare(s,t);if(value>0) cout<<"串s大于串t"<<endl;else if(value==0) cout<<"串s等于串t"<<endl;else cout<<"串s小于串t"<<endl;cout<<endl;break;}case 6:HString s;char str[20];char *chars;int val;cout<<"请输入串s:";cin>>str;chars=str;StrAssign(s,chars);val=StrLen(s);cout<<"串的长度为:"<<val<<endl;break;case 7:cout<<"操作结束!"<<endl;break;default:cout<<"输入错误!请重新输入!"<<endl;break;}}while(i!=7);3.KMP算法的C实现#include<iostream.h>#include<malloc.h>#include<string.h>struct HString{char *ch;int length;};void StrAssign(HString &t,char *chars){int i;char *c;for(i=0,c=chars;*c;++i,++c);if(!i){t.ch=NULL;t.length=0;}else{t.ch=(char *)malloc(i*sizeof(char));for(int j=0;j<i;j++)t.ch[j]=chars[j];t.length=i;}}void get_next(HString s,int next[]){int i,j;i=1;j=0;next[1]=0;while(i<s.length){if(j==0||s.ch[i-1]==s.ch[j-1]){i++;j++;next[i]=j;}else j=next[j];}for(i=1;next[i]!='\0';i++)cout<<next[i]<<" ";}int Index(HString s,HString t,int pos){int i=pos;int j=1;int next[20];get_next(t,next);while(i<=s.length&&j<=t.length){if(s.ch[i-1]==t.ch[j-1]||j==0){ ++i;++j;}else{j=next[j];}}if(j>t.length)return i-t.length;else return 0;}void Display(HString t){for(int i=0;i<t.length;i++)cout<<t.ch[i];cout<<endl;}void main(){ HString s,t;int pos,k;char a[20],b[20];char *sa,*sb;cout<<"请输入主串s:";cin>>a;sa=a;StrAssign(s,sa);cout<<"请输入模式串t:";cin>>b;sb=b;StrAssign(t,sb);cout<<"请输入起始位置pos:";cin>>pos;k=Index(s,t,pos);if(k==0)cout<<"匹配失败!"<<endl<<endl;else{cout<<"从第"<<k<<"个位置开始匹配"<<endl;Display(s);for(int i=1;i<k;i++)cout<<" ";Display(t);}}【小结讨论】1. 此程序关键在于位置查询,由于对C语言函数的陌生导致问题变的繁琐,自己的C语言水平有待提高。
《数据结构》实验三【 串的基本操作】
if(s[n]!=t[n])
{
m=t[n]-s[n];
printf(" %d\n",m);
break;
}
if(m==0)
{
m=i-j;
printf(" %d\n",m);
}
}
void Concat(char s[ ]) //串的连接
{
char t[MAXSTRLEN],l[MAXSTRLEN];
case 3: StrCompare(s);break;
case 4: Concat(s);break;
case 5:Index(s);brou want to continue?\n");
printf("------------- ");
do{
scanf("%c",&continue_or);
void PrintMenu( )//菜单函数输出显示
{
printf("*******************************************\n");
printf("******** 1.Copy existing string********\n");
printf("******** 2.String length********\n");
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
实验目的:
掌握串的结构以及基本操作。
串的基本操作演示实验报告
串的基本操作演示实验报告学号:姓名:班级:一.实验环境问题描述:如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。
试实现串类型,并写一个串的基本操作的演示系统。
基本要求: 在教科书4.2。
2节用堆分配存储表示实现HString串的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数).参数合法性检查必须严格。
说明:(在格式中,Φ表示0个、1个或多个空格所组成的串。
〈串标识〉表示一个内部名或一个串文字。
前者是一个串的唯一标识,是一种内部形式的(而不是字符形式的)标识符。
后者是两端由单引号括起来的仅可打印字符组成的序列.串内每两个连续的单引号表示一个单引号符。
)利用上述基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。
命令定义如下:(1) 赋值.格式:AΦ〈串标识>Φ<回车〉用〈串标识>所表示的值建立新串,并显示新串的内部名和串值。
如:A′Hi!′(2)判相等。
格式:EΦ〈串标识1>Φ〈串标识2〉Φ〈回车〉若两串相等,则显示“EQUAL",否则显示“UNEQUAL”。
(3)联接。
格式:CΦ<串标识1〉Φ〈串标识2>Φ〈回车〉将两串联接产生结果串,它的内部名和串值都显示出来.(5) 求子串格式:SΦ〈串标识〉Φ+〈数1〉Φ+〈数2〉Φ<回车>如果参数合法,则显示子串的内部名和串值。
<数〉不带正负号.(6)子串定位. 格式:IΦ〈串标识1〉Φ〈串标识2〉Φ〈回车〉显示第二个串在第一个串中首次出现时的位置。
(7)串替换格式:RΦ〈串标识1〉Φ〈串标识2〉Φ〈串标识2>Φ〈回车〉将第一个串中出现所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。
(0)退出格式:QΦ<回车> 结束程序的运行.二、实验内容编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序.具体如下:编写栈的基本操作函数顺序串类型定义如下所示:typedef struct node{char data;struct node *next;}linkstring;(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。
实验三 串类型及操作
编程实现在串s中下标为pos的字符之前插入串t。串的存储 结构采用定长顺序存储,表示如下: /*串结构定义*/
#define MAXLEN 40
typedef struct {
char ch[MAXLEN]; int len;
}SString;
请完成函数int StrInsert(SString *s, int pos, SString t)的代码,若插入成功,函数值返回1, 则 返回0。
4、实验步骤
(1)理解串的类型定义及插入操作的基本实验原理;
(2)仔细分析实验内容,给出其算法和流程图; (3)用C或C++语言实现该算法; (4)给出测试数据,并分析其结果; (5)在实验报告册上写出实验过程。
课后作业
编写模式匹配算法。
基本思想:设有两个字符串s和t,首先将s1与t1进 行比较,直到s的某一个字符si和ti相同,再将它们 之后的字符进行比较,若也相同,则如此继续往下 比较,当s的某一个字符si与t的字符tj不同时,则s 返回到本趟开始字符的下一个字符,即si-j+2,t返 回到t1,继续开始下一趟的比较,重复上述过程。 若t中的字符全部比较完,则说明本趟匹配成功,本 趟的起始位置是i-j+1,否则,匹 struct seqstr {char string[max] ; int len : } ; int index ( struct seqstr *s ,struct seqstr * t ) { int I , j ; i=0 ; j=0 ; while ( i<s->len&&j<t->len ) if ( s->string[i] == t->string[j]) { i++ ; j++ ; } else { i=i-j+1 ; j=1; } if ( j>=t->len ) return( j-t->len) ; else return( -1) ;}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("******************************************\n");
}
void StrCopy(char s[ ])//把串s赋给串t
{
char t[MAXSTRLEN];
3.输出串
4.连结两个串
实
验
结
果
分
析
及
心
得
体
会
实验心得:
``````
``````
```````
成
绩
评
定
教师签名:
2011年月日
int i=0;
printf(" The string of t for after reproduction: ");
while(s[i]!='\0')
{
t[i]=s[i];
printf("%c",t[i]);
i++;
}
printf("\n\n");
}
实
验
原
理
(
算
法
流
程
)
实
验
原
理
(
算
法
流
程
)
int StrLength(char s[])
case 3: StrCompare(s);break;
case 4: Concat(s);break;
case 5:Index(s);break;
}
printf("Do you want to continue?\n");
printf("------------- ");
do{
scanf("%c",&continue_or);
for(k;k<=i;k++)
printf("%c",l[k]);
printf("\n");
}
void Index(char s[ ]) //模式匹配
{
char t[MAXSTRLEN];
int i,j=1,m,n,pos;
printf(" Input mode string:");
scanf("%s",t);
院系:计算机科学学院
专业:计算机科学与技术
年级:
课程名称:
学号:
姓名:
指导教师:
2011年04月29日
年级
班号
学号
专业
计算机科学与技术
姓名
实验名称
串的基本操作
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
实验目的:
掌握串的结构以及基本操作。
实验要求:
1.以菜单界面的方式运行
2.要求对串进行输入、输出、连结,得到子串等操作。
scanf("%s",t);
printf("\n");
i=StrLength(t);
j=StrLength(s);
printf("Lord, output of more than mode of greater than 0; The Lord isequal to the mode of string,output equals 0; Less than less than 0 is the output;\n");
else
printf("\nWithout the same sequence of Numbers!\n");
}
int main( )
{
char s[MAXSTRLEN]="abcdefghijk";
PrintMenu();
ChooseMenu(s);
return 1;
}
void ChooseMenu(char s[])
printf("******** 1.Copy existing string********\n");
printf("******** 2.String length********\n");
printf("********3.String of comparative********\n");
printf("********4.String of connection********\n");
printf("\n输入pos(0<pos<11): ");
scanf("%d",&i);
m=StrLength(t);
n=StrLength(s);
while(i<=n&&j<=m)
{
if(s[i]==t[j])
{ ++i; ++j; }
else
{ i=i-j+2; j=1; }
}
if(j>m)
printf("\nInput mode in s string string after the first % d a position!\n",i-m);
实
验
原
理
(
算
法
流
程
)
#include<stdio.h>
#define MAXSTRLEN 255
void ChooseMenu(char s[ ]);
void PrintMenu( )//菜单函数输出显示
{
printf("*******************************************\n");
}
while(continue_or!='y'&&continue_or!='y'&&continue_or!='N'&&continue_or!='n');
}
while(continue_or=='Y'||continue_or=='y');
}
实
验
结
果
分
析
及
心
得
体
会
运行结果:
1.菜单
2.主串s和模式串t比较
int i=0,j=0,k=0;
printf(" Input exception a string:");
scanf("%s",t);
while(s[i]!='\0')
{
l[i]=s[i];
i++;
}
while(t[j]!='\0')
{
l[i]=t[j];
j++;
i++;
}
printf("\nCombined with the mode of Lord of the new string:\n");
{
int k=0;
while(s[k]!='\0')
{
k++;
}
return k;
}
void StrCompare(char s[ ]) //主串s和模式串t比较
{
char t[MAXSTRLEN];
int i,j,n,m=0;
printf(" Input exception a string:");
for(n=0;n<i&&n<j;++n)
if(s[n]!=t[n])
{
m=t[n]-s[n];
printf(" %d\n",m);
break;
}
if(m==0)
{
m=i-j;
printf(" %d\n",m);
}
}
void Concat(char s[ ]) //串的连接
{
char t[MAXSTRLEN],l[MAXSTRLEN];
{
char chose_num,continue_or;
int i;
do{
printf(" Input your choose:");
scanf("%d",&chose_nswitch(chose_num)
{
case 1: StrCopy(s);break;
case 2: i=StrLength(s); printf("String s long for:%d\n",i); break;