实验三 串基本操作的实现

合集下载

串的应用实验报告小结

串的应用实验报告小结

串的应用实验报告小结实验目的:本实验旨在探索串的应用,并通过实际操作,加深对串的理解和应用能力。

实验原理:串是计算机中常用的数据类型,表示一个字符序列。

在实际应用中,串具有很强的灵活性和实用性,可以用于字符串的处理、文本处理、数据传输等场景。

串的基本操作包括串的定义、串的赋值、串的连接、串的比较、串的查找、串的替换等。

实验仪器和材料:编程环境:本实验使用Python编程语言进行实验操作。

实验过程中需要使用字符串处理相关的函数和方法。

实验步骤:1. 串的定义与赋值:首先介绍串的定义方法,并进行一些基本的赋值操作,包括直接赋值和通过输入获取串的赋值。

2. 串的连接:实现两个串的连接操作,了解串的拼接方式及其应用场景。

3. 串的比较:通过比较两个串的内容,了解串的比较操作及其返回值的含义。

4. 串的查找与替换:实现对串的查找和替换操作,掌握相关函数的用法并思考其实际应用。

实验结果:通过本次实验,我对串的相关操作有了更深入的了解。

掌握了串的基本定义、赋值、连接、比较、查找和替换等操作,并能够将其应用到实际问题中。

在实验过程中,我学会了如何利用串来处理文本数据,进行查找和替换操作,以及如何利用串的连接来构造更复杂的字符串。

这些知识和实践经验对我的编程能力和问题解决能力都有所提高。

实验总结:通过本次实验,我对串的基本概念和相关应用有了更深入的了解。

串作为计算机中重要的数据类型,在实际应用中有着广泛的应用场景,掌握了串的相关操作,将对我的日常编程工作和问题解决能力产生积极的影响。

串的处理能力将对字符串处理、文本处理、数据传输等方面有很大帮助。

结语:本次实验使我更加深入地理解了串的概念及其在实际应用中的作用。

通过在实验中动手操作,我对串的相关操作有了更深入的了解,相信这将对我的编程能力和问题解决能力有所提升。

我也意识到了串在计算机领域的重要性和广泛的应用前景,将积极应用串的相关知识到我的日常工作和学习中。

北邮数据结构实验报告

北邮数据结构实验报告

北邮数据结构实验报告摘要:本报告基于北邮数据结构实验,通过实际操作和实验结果的分析,总结和讨论了各实验的目的、实验过程、实验结果以及相关的问题和解决方法。

本报告旨在帮助读者了解数据结构实验的基本原理和应用,并为今后的学习和研究提供参考。

1. 实验一:线性表的操作1.1 实验目的本实验旨在掌握线性表的基本操作以及对应的算法实现,包括插入、删除、查找、修改等。

1.2 实验过程我们使用C++语言编写了线性表的相关算法,并在实际编程环境下进行了测试。

通过插入元素、删除元素、查找元素和修改元素的操作,验证了算法的正确性和效率。

1.3 实验结果经过测试,我们发现线性表的插入和删除操作的时间复杂度为O(n),查找操作的时间复杂度为O(n),修改操作的时间复杂度为O(1)。

这些结果与预期相符,并反映了线性表的基本特性。

1.4 问题与解决方法在实验过程中,我们遇到了一些问题,例如插入操作的边界条件判断、删除操作时的内存释放等。

通过仔细分析问题,我们优化了算法的实现,并解决了这些问题。

2. 实验二:栈和队列的应用2.1 实验目的本实验旨在掌握栈和队列的基本原理、操作和应用,并进行实际编程实现。

2.2 实验过程我们使用C++语言编写了栈和队列的相关算法,并在实际编程环境下进行了测试。

通过栈的应用实现表达式求值和逆波兰表达式的计算,以及队列的应用实现图的广度优先遍历,验证了算法的正确性和效率。

2.3 实验结果经过测试,我们发现栈的应用可以实现表达式的求值和逆波兰表达式的计算,队列的应用可以实现图的广度优先遍历。

这些结果证明了栈和队列在实际应用中的重要性和有效性。

2.4 问题与解决方法在实验过程中,我们遇到了一些问题,例如中缀表达式转后缀表达式的算法设计、表达式求值的优化等。

通过查阅资料和与同学的讨论,我们解决了这些问题,并完善了算法的实现。

3. 实验三:串的模式匹配3.1 实验目的本实验旨在掌握串的基本操作和模式匹配算法,并进行实际编程实现。

串-数据结构实验报告

串-数据结构实验报告

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

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

二、实验环境本次实验使用的编程语言为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、连接操作成功实现,输出了正确连接后的字符串。

数据结构串实验报告

数据结构串实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

串的基本操作

串的基本操作

串得基本操作一、实验目得、意义(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)。

串基本操作的编程实现

串基本操作的编程实现

串基本操作的编程实现串(String)是一种数据结构,用于存储和操作字符序列。

在编程中,我们经常需要处理文本数据,比如字符串的搜索、替换、拼接等操作。

本文将以串基本操作为主题,分步解析在编程中如何实现这些操作。

1. 串的定义与表示在开始之前,我们首先需要了解串的定义与表示。

串是由零个或多个字符组成的有限序列。

可以使用字符数组或链表来表示一个串,这里我们以使用字符数组实现为例。

c#define MAX_SIZE 100typedef struct {char data[MAX_SIZE]; 用字符数组存储串的字符序列int length; 串的当前长度} String;2. 串的赋值与初始化在使用一个串之前,需要先进行初始化或者赋值操作。

初始化是指将字符串初始化为空串,而赋值是指将一个字符串赋值给另一个字符串。

下面是它们的具体实现。

c初始化串为空串void initString(String* s) {s->length = 0; 将串的长度初始化为0}将字符串t赋值给字符串svoid assignString(String* s, const char* t) {int i = 0;while (t[i] != '\0' && i < MAX_SIZE) {s->data[i] = t[i];i++;}s->length = i;}3. 串的拼接拼接是指将两个串连接在一起,形成一个新的串。

下面是串的拼接操作的实现。

c将字符串s2拼接到字符串s1的末尾void concatString(String* s1, const String* s2) {int i, j;for (i = s1->length, j = 0; j < s2->length && i < MAX_SIZE - 1; i++, j++) {s1->data[i] = s2->data[j];}s1->length = i;s1->data[i] = '\0'; 在拼接串的末尾添加结束符}4. 串的比较比较是指判断两个串是否相等。

北京理工大学汇编语言实验报告3字符串操作实验(设计性实验)

北京理工大学汇编语言实验报告3字符串操作实验(设计性实验)
实验类型: □ 综合设计 □ 自主创新
组 号:
同组搭档:
成 绩:
一、实验要求和目的
1.了解汇编语言字符串处理基本流程; 2.熟悉汇编语言字符串处理基本指令的使用方法; 3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、软硬件环境
1、硬件环境:计算机系统 windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
str1 db 'fs3qas' count equ $-str1 DATAS ENDS copy segment
str2 db count dup(?) copy ends
CODES SEGMENT ASSUME CS:CODES,DS:DATAS,es:copy
START: MOV AX,DATAS MOV DS,AX mov es,dx;开始复制 mov cx,count cld rep movsb MOV AH,4CH INT 21H
这里面显示的bx=1,符合实际情况 若修改一下源代码,把字符串多加几个‘.’则结果如下:
代码中有3个‘.’运行结果中bx=3,符合实际情况,源代码题设要求
五、实验要求与提示
1、实验要求 (1)画出各程序流程图; (2)列出程序清单,加上适量注释; (3)回答思考问题; (4)记录实验结果; (5) 完成实验报告(实验材料上的内容简写,自己的工作要详尽)。 2、实验提示: A)自动获取字符串长度,可以利用地址计数器$ 表达式获得。 B)字符/字符串输入输出 主要利用 DOS 的INT 21H 系统功能调用来实现字符或字符串的输入/输出操作,其中1 号功能表示输入字符;2 号功能表示输出字符;0A 号功能表示输入字符串;09 号功能表 示 输出字符串。如果大家想现在使用可以详细查阅相关资料,在后面的课程内容和实验上会详 细学习,这里简单示例提示一下: (1)显示单个字符可以用DOS 的INT 21H 的2 号功能,将字符放在DL 寄存器中,2 号放在AH 寄存器中。 MOV AL, ’*’ MOV AH,2 INT 21H (2)数据区中的字符串应以$结尾,DS:DX=串地址;如果提前已经定义需要显示的字 符串,显示字符串可以用如下功能调用: LEA DX,STR MOV AH,9 INT 21H

串的数据结构实验报告

串的数据结构实验报告

串的数据结构实验报告串的数据结构实验报告一、引言在计算机科学中,串(String)是一种基本的数据结构,用于存储和操作字符序列。

串的数据结构在实际应用中具有广泛的用途,例如文本处理、搜索引擎、数据库等。

本实验旨在通过实践掌握串的基本操作和应用。

二、实验目的1. 理解串的概念和基本操作;2. 掌握串的存储结构和实现方式;3. 熟悉串的常见应用场景。

三、实验内容1. 串的定义和基本操作在本实验中,我们采用顺序存储结构来表示串。

顺序存储结构通过一个字符数组来存储串的字符序列,并使用一个整型变量来记录串的长度。

基本操作包括:- 初始化串- 求串的长度- 求子串- 串的连接- 串的比较2. 串的模式匹配串的模式匹配是串的一个重要应用场景。

在实验中,我们将实现朴素的模式匹配算法和KMP算法,并比较它们的性能差异。

四、实验步骤1. 串的定义和基本操作首先,我们定义一个结构体来表示串,并实现初始化串、求串的长度、求子串、串的连接和串的比较等基本操作。

2. 串的模式匹配a. 实现朴素的模式匹配算法朴素的模式匹配算法是一种简单但效率较低的算法。

它通过逐个比较主串和模式串的字符来确定是否匹配。

b. 实现KMP算法KMP算法是一种高效的模式匹配算法。

它通过利用已匹配字符的信息,避免不必要的比较,从而提高匹配效率。

3. 性能比较与分析对比朴素的模式匹配算法和KMP算法的性能差异,分析其时间复杂度和空间复杂度,并讨论适用场景。

五、实验结果与讨论1. 串的基本操作经过测试,我们成功实现了初始化串、求串的长度、求子串、串的连接和串的比较等基本操作,并验证了它们的正确性和效率。

2. 串的模式匹配我们对两种模式匹配算法进行了性能测试,并记录了它们的运行时间和内存占用情况。

结果表明,KMP算法相较于朴素算法,在大规模文本匹配任务中具有明显的优势。

六、实验总结通过本实验,我们深入学习了串的数据结构和基本操作,并掌握了串的模式匹配算法。

串操作实验报告

串操作实验报告

竭诚为您提供优质文档/双击可除串操作实验报告篇一:顺序串的基本操作实验报告宁波工程学院电信学院计算机教研室实验报告课程名称:数据结构实验项目:顺序串的基本操作实验人员:徐浩学号:10401010209班级:计科102指导教师:宋宏图实验位置:计算机中心二楼实验日期:20XX-10-13一、实验目的1)熟悉串的定义和串的基本操作。

2)掌握顺序串的基本运算。

3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。

二、实验环境装有Visualc++6.0的计算机。

本次实验共计2学时。

三、实验内容编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。

具体如下:编写栈的基本操作函数顺序串类型定义如下所示:typedefstruct{charch[mAxsIZe];intlen;}seqstring;(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的子串,并返回产生的新串。

(9)串替换Repstr(s,s1,s2)?在串s中,将所有出现的子串s1均替换成s2。

(10)输出串Dispstr(s)?输出串s的所有元素值(11)判断串是否为空Isempty(s)编写主函数调用上述函数实现下列操作:(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是否相等,输出结果程序:#include#definemAxsIZe100typedefstruct{charch[mAxsIZe];intlen;}sqstring;voidstrAssign(sqstringfor(i=0;t[i]!=\0;i++)s.ch[i]=t[i];s.len=i;}voidstrcopy(sqstring并输出for(i=0;i s.ch[i]=t.ch[i];s.len=t.len;}voidstrequal(sqstrings,sqstringt){//判断串相等intsame=1,i;if(s.len!=t.len){same=0;}else{for(i=0;i if(s.ch[i]!=t.ch[i]){same=0;break;}}if(same==0)printf("s1,s5不相等");elseprintf("s1,s5相等");printf("\n");}voidstrLength(sqstrings){//计算串长度printf("t1的长度:");printf("%d",s.len);printf("\n");}sqstringconcat(sqstrings,sqstringt){//串连接sqstringstr;inti;str.len=s.len+t.len;for(i=0;i str.ch[i]=s.ch[i];for(i=0;i str.ch[s.len+i]=t.ch[i];returnstr;}sqstringsubstr(sqstrings,inti,intj){//求子串sqstringstr;intk;str.len=0;if(is.len||js.len)returnstr;for(k=i-1;k str.ch[k-i+1]=s.ch[k];str.len=j;returnstr;}sqstringInsstr(sqstrings1,inti,sqstrings2){//插入intj;sqstringstr;str.len=0;if(is1.len+1)returnstr;for(j=0;j str.ch[j]=s1.ch[j];for(j=0;j str.ch[i+j-1]=s2.ch[j];for(j=i-1;j str.ch[s2.len+j]=s1.ch[j];str.len=s1.len+s2.len;returnstr;}sqstringDelstr(sqstrings,inti,intj){//删除intk;sqstringstr;str.len=0;if(is.len||i+j>s.len+1)returnstr;for(k=0;k str.ch[k]=s.ch[k];for(k=i+j-1;k str.ch[k-j]=s.ch[k];str.len=s.len-j;returnstr;sqstringRepstr(sqstrings,inti,intj,sqstringt){//替换intk;sqstringstr;str.len=0;if(is.len||i+j-1>s.len)returnstr;for(k=0;k str.ch[k]=s.ch[k];for(k=0;k str.ch[i+k-1]=t.ch[k];for(k=i+j-1;k str.ch[t.len+k-j]=s.ch[k];str.len=s.len-j+t.len;returnstr;}voidDispstr(sqstrings){//输出串所有元素inti;if(s.len>0){for(i=0;i printf("%c",s.ch[i]);printf("\n");}}voidIsempty(sqstrings){//判断串是否为空if(s.len>0)printf("串不为空");elseprintf("串为空");printf("\n");}篇二:串实验报告篇三:字符串实验报告数据结构字符串实验班级:计算机应用技术10-1学号:10602101048姓名:姚福刚一、实验目的及要求:掌握有关字符串的基本操作和存储结构,并编写相应的基本操作算法。

数据结构串的实验报告

数据结构串的实验报告

一、实验目的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算法的编写和调试,但在老师和同学的指导下,我成功地解决了这些问题。

数据结构实验大纲

数据结构实验大纲

数据结构实验大纲数据结构实验大纲1·实验目的1·1 熟悉数据结构的基本概念和算法1·2 掌握数据结构在实际问题中的应用1·3 培养分析和解决问题的能力2·实验环境2·1 编程语言:C/C++2·2 开发环境:Visual Studio/Xcode/Dev-C++ 3·实验内容3·1 实验一:线性表3·1·1 顺序表的基本操作3·1·2 单链表的基本操作3·1·3 循环链表的基本操作3·1·4 双向链表的基本操作3·2 实验二:栈与队列3·2·1 栈的基本操作3·2·2 队列的基本操作3·2·3 使用栈实现表达式求值3·2·4 使用队列实现约瑟夫环3·3 实验三:串与数组3·3·1 串的基本操作3·3·2 数组的基本操作3·3·3 字符串的模式匹配算法3·3·4 多维数组的应用3·4 实验四:树与图3·4·1 二叉树的基本操作3·4·2 二叉树的遍历算法3·4·3 霍夫曼树与哈夫曼编码3·4·4 图的存储结构与基本操作 3·4·5 图的遍历算法4·实验要求4·1 完成实验指导书中的所有实验内容4·2 书写实验报告,包括实验目的、实验环境、实验过程、实验结果分析和总结4·3 实验报告要求有清晰的实验步骤和相应截图或代码4·4 实验报告中需对实验结果进行说明和评价5·实验评分5·1 实验报告(60%)5·2 实验代码(40%)5·3 完成以上要求并提交实验报告和代码截图,得到及格分数6·附件6·1 实验指导书6·2 实验代码示例7·法律名词及注释●数据结构:指计算机中用于组织和存储数据的一种方式,它定义了数据之间的关系和操作。

数据结构课程标准

数据结构课程标准

《数据结构》课程标准(专科)一、课程的性质:《数据结构》是计算机专业的一门必修专业基础课,它是一门理论性强,但有一定的实践性和较强实用性的基础课程。

二、课程的教学目的与任务:本课程的任务是讨论数据的各种逻辑结构、存储结构以及有关操作的算法。

目的是使学生掌握分析研究计算机加工的数据对象的特性,以便对所要处理的数据对象选择合适的数据结构和存储结构,并在此基础上掌握对这些数据的操作(查找、插入、删除和修改等)。

同时培养学生运用C 语言编写结构清晰、正确易读的算法,并具备初步评价算法的能力,为学生今后继续学习和研究打下坚实的基础。

三、课程的教学手段和方法:本课程理论讲授采用教材与多媒体相配合的教学手段。

本课程包括课堂教学与实践教学两大部份。

课堂教学在方法上,采用课堂讲授、课后自学、课堂讨论、平时测验等教学形式。

实践教学部份主要是实验。

四、课程内容及学时分配(共 72 学时,其中讲课 60 学时,实验 12 学时):一、基本要求:掌握数据结构的一些基本概念,了解抽象数据类型的定义和使用。

二、教学重点及难点:本节重点是了解数据结构的逻辑结构、存储结构及数据的运算三方面的概念及相互关系。

教学难点是什么是数据的逻辑结构及物理结构?三、讲授内容:(一)数据结构的一些基本概念:数据、数据元素、数据逻辑结构、数据存储结构、数据类型、算法等。

(二)抽象数据类型。

四、思量题:举出一个数据结构的例子,叙述其逻辑结构、存储结构、结构上的操作内容。

一、基本要求:掌握算法的时间复杂度和空间复杂度的分析方法,了解算法的描述方法。

二、教学重点及难点:本节重点是算法的各种描述方法和算法分析(时间复杂度及空间复杂度)。

教学难点是对一个算法时间复杂度的分析。

三、讲授内容:(一)描述算法所用的 C 语言中的一些有关问题。

(二)算法时间复杂度和空间复杂度的分析。

四、思量题:编写算法,求一元多项式 P (x)=a +a x+a x2+a x3+…a x n 的值 P (x ),要求时间复杂度尽可能小。

串的基本操作

串的基本操作

一.实验目的如果计算机语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。

试着实现串类型,并写一个串的基本操作演示系统。

二.实验内容实现若干串的常用基本操作,如串赋值、求串长、串替换、串比较、求子串及串的模式匹配等。

模块设计本程序包含两个模块:主程序模块、串操作模块。

其调用关系如图2所示。

图2 模块调用关系示意图三.实验步骤(可选)数据类型定义(1) 字符串的定义typedef struct{char *ch; //串存放的数组int curLen; //串的长度}HString;(2) 全局变量声明#define OK 1 //操作成功#define OVERFLOW 0 //溢出#define ERROR 0 //出错系统主要子程序详细设计(1)主程序模块设计主函数。

设定用户操作界面,调用操作模块函数。

void main(){输出操作菜单;Switch (1){输出操作序号c;switch (c){调用相应函数执行相应操作;输出操作结果;}}}(2)求子串int substring(HString &Sub,HString S,int pos,int len){ //´串sub返回串S的第pos个字符起长度为len的子串int i;if(pos<0||pos>S.curLen||len<0||len>S.curLen-pos){ //若位置或长度不合法,退出printf("输入不合法\n");exit(OVERFLOW); //退出}else{if(Sub.ch) free(Sub.ch); //释放子串sub原有空间if(!len) //若长度len为0{ //就爱那个子串置为空串Sub.ch=NULL;Sub.curLen=0;}else //若长度len不为0{Sub.ch=(char*)malloc(len*sizeof(char));for(i=0; i<len; i++){ //从串S的第pos个字符开始依次复制其后长度为len的字符串sub中Sub.ch[i]=S.ch[pos-1+i];Sub.curLen=len; //修改串sub的串长}}return OK;}}(3)子串定位(串的模式匹配)int Index(HString &ob1,HString &ob2,int pos){ //判断从第pos个字符起,ob2是否为ob1的子串//若是返回ob2在ob1中的起始位置,否则返回-1if(pos<0||pos>ob1.curLen){//若输入的数值pos不在ob1的串长范围内printf("输入有误\n");exit(ERROR);}for(int i=pos-1; i<=StrLength(ob1)-StrLength(ob2); i++){ //从ob1的第pos个字符起查找子串ob2int j=0; //从ob2的第一个字符起开始查找while(j<StrLength(ob2)) //j控制查找位置,逐个字符查找,直到超出子串串长{if(ob1.ch[i+j]==ob2.ch[j]) //若找到匹配字符j++; //则依次向后查找else break; //一旦失配,则跳出查找,此时j还未能达到子串串长}if(j==StrLength(ob2)) //若j达到子串串长,即ob2的所有字符都能和ob1匹配return i; //返回ob2在ob1的起始位置i}return -1; //ob2不是ob1的子串,返回-1}(4)串替换void Replace(HString &ob1,HString &ob2,HString &ob3){ //将原串ob1的所有子串ob2都替换为插入串ob3printf("原串:");for(int i=0; i<ob1.curLen; i++)printf("%c",ob1.ch[i]);printf("\n 子串:");for(int j=0; j<ob2.curLen; j++)printf("%c",ob2.ch[j]);printf("\n");printf("插入串:");for(int k=0; k<ob3.curLen; k++)printf("%c",ob3.ch[k]);printf("\n");int len=StrLength(ob2); //ob2的长度while(Index(ob1,ob2,0)!=-1) //当ob2是ob1的子串,替换所有的ob2 {int len2=StrLength(ob3)+StrLength(ob1)-StrLength(ob2); //新串的长度int i=Index(ob1,ob2,0); //调用子串定位函数char *p=new char[StrLength(ob1)-i-len+1]; //临时数组char *q=new char[len2]; //存储新串的数组for(int j=i+len; j<StrLength(ob1); j++)p[j]=ob1.ch[j]; //将不用替换的后部分存入数组pfor(int k=0; k<i; k++)q[k]=ob1.ch[k]; //将不用替换的前部分存入数组q for(int m=i; m<i+StrLength(ob3); m++)q[m]=ob3.ch[m-i]; //替换子串int b=i+len;for(int n=i+StrLength(ob3); n<len2; n++){ //将不用替换的后部分存入数组qq[n]=p[b];b++; //数组q存储着新串}ob1.curLen=len2;for(int l=0; l<len2; l++)ob1.ch[l]=q[l]; //将新串赋值给ob1做循环替换}printf("新串:");for(int h=0; h<ob1.curLen; h++)printf("%c",ob1.ch[h]);}(5)串比较int Compare(HString s1, HString s2){ //若s1<s2则返回值<0; 若s1=s2则返回值=0; 若s1>s2则返回值>0int i;for(i=0; i<s1.curLen&&i<s2.curLen; ++i)if(s1.ch[i]!=s2.ch[i])return (s1.ch[i]-s2.ch[i]);return (s1.curLen-s2.curLen);}四.实验的结果及分析。

数据结构串基本操作代码

数据结构串基本操作代码

数据结构串基本操作代码串是由零个或多个字符组成的有限序列,是数据结构中的一种基本数据类型。

常见的串操作有串的存储、串的插入、串的删除、串的替换、串的连接、串的比较等。

以下是对串基本操作的代码实现:1.串的存储串的存储可以使用数组或链表来实现。

下面是基于数组的实现方式。

```C++#define MAX_LEN 100 // 定义串的最大长度typedef structchar data[MAX_LEN]; // 存储串的字符数组int length; // 当前串的长度} String;//初始化串void InitString(String &s)s.length = 0;//串赋值void AssignString(String &s, char str[])int len = strlen(str);for (int i = 0; i < len; i++)s.data[i] = str[i];}s.length = len;//输出串void PrintString(String s)for (int i = 0; i < s.length; i++)cout << s.data[i];}cout << endl;```2.串的插入在指定位置上插入指定内容。

```C++//串的插入void InsertString(String &s, int pos, char str[]) int len = strlen(str);if (s.length + len > MAX_LEN)return; // 串已满,无法插入for (int i = s.length - 1; i >= pos; i--)s.data[i + len] = s.data[i];}for (int i = pos, j = 0; j < len; i++, j++)s.data[i] = str[j];}s.length += len;```3.串的删除删除指定位置上的字符。

串操作实验报告

串操作实验报告

串操作实验报告串操作实验报告引言:串操作是计算机科学中的一项基本操作,它涉及到对字符串的处理和操作。

在本次实验中,我们将学习和掌握一些常见的串操作技术,并通过实际操作加深对这些技术的理解和应用。

实验目的:1. 掌握字符串的基本概念和表示方法;2. 学习串的初始化、赋值和销毁操作;3. 熟悉串的基本操作,如求串的长度、比较串、连接串等;4. 掌握串的模式匹配算法。

实验过程:1. 字符串的初始化和赋值在本次实验中,我们使用C语言来进行串操作的实现。

首先,我们需要初始化一个字符串,并为其分配内存空间。

然后,我们可以通过赋值操作将一个字符串赋给另一个字符串。

这样,我们就可以对这个字符串进行各种操作。

2. 求串的长度求串的长度是串操作中的一个基本操作。

我们可以通过遍历字符串中的每一个字符,并计数来得到字符串的长度。

在实际操作中,我们可以使用strlen()函数来实现这个功能。

3. 比较串比较串是判断两个字符串是否相等的操作。

我们可以逐个字符地比较两个字符串中的字符,如果所有字符都相等,则认为两个字符串相等。

在实际操作中,我们可以使用strcmp()函数来实现这个功能。

4. 连接串连接串是将两个字符串连接成一个新的字符串的操作。

我们可以先计算出新字符串的长度,然后将两个字符串中的字符逐个复制到新的字符串中。

在实际操作中,我们可以使用strcat()函数来实现这个功能。

5. 串的模式匹配串的模式匹配是在一个字符串中查找另一个字符串的操作。

我们可以通过遍历字符串中的每一个字符,并与目标字符串进行比较来实现这个功能。

在实际操作中,我们可以使用strstr()函数来实现这个功能。

实验结果:通过实验,我们成功地完成了串操作的各项任务。

我们学会了如何初始化和赋值字符串,如何求串的长度,如何比较和连接串,以及如何进行串的模式匹配。

这些技术对于我们在日后的编程工作中处理字符串将会非常有帮助。

结论:串操作是计算机科学中的一项基本操作,它对于我们处理字符串非常重要。

串的基本操作的编程实现

串的基本操作的编程实现

串的基本操作的编程实现Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】数据结构双语班DATA STRUCTURE BILINGUAL-TEACHING CLASS 实验报告003 批改单Experiment Report Commendatory Bill串基本操作的编程实现2006-2007(2)学期 T523-1班学号:33 姓名:王娟指导老师:马春江时间:【实验目的】内容:串基本操作的编程实现要求:串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现,用菜单进行管理。

也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】验证性实验(学时数:2H)【实验内容】可以只完成基本的功能演示程序。

也可以通过一个较为实用的系统下体现各种操作的作用,如可以开发一个文本统计程序,要求如下:编写程序,进行字符串统计系统的设计将存在txt文件中的文本进行统计:字母数、标点符号数、单词数、句子数、段落数。

进一步的工作(统计:汉字数、每个单词的次数和所在行数等)【详细设计】#include <>#include <>#include <>#define Maxlen 50#include <string>using namespace std;typedef struct{char ch[Maxlen];int len;}strtype;void disp(strtype *s) 出程序。

(按其他键继续) ┃","┃┃","┃┃","┃┃","┃OO════∩════OO指导老师:马春江┃","┃湖北汽车工业学院作者:王娟┃","┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮┃","┃╰═▃_电气工程系∠════▔▔▔┃","┃*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*,, ┃","┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮ *:-.,,.-:*,、☆*:-., ┃","┃║双║║语║║班║║天║║地║★*:-., ┃","┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘┃","┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"};int i,j;for(i=20;i>=0;i--){system("cls");for(j=i;j<=25;j++){cout<<"\t"<<p[j]<<endl;}Sleep(150);}}void menu2(){char *p[]={"┏━━┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳━━┓","┃ ^_^┠数┨┠据┨┠结┨┠构┨┠程┨┠序┨┠设┨┠计┨^_^ ┃","┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┃","┣━━━━━━━━字符串的基本操作实现━━━━━━━━━┫","┃程序功能: ┃","┃┃","┃本程序实现字符串的基本操作┃","┃┃","┃ 0.退出程序。

串的基本操作和简程序实验心得

串的基本操作和简程序实验心得

串的基本操作包括: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;}```实验心得:通过这个简单的程序,我了解了串的基本操作和实现方法。

数据结构串基本操作代码

数据结构串基本操作代码

实验三串//串的基本操作#include "stdio.h"#include "stdlib.h"#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN+1];void strlength(SString S)//求字串并放到 S[0] 中{int m;for(m=1;S[m]!='\0';m++);S[0]=m-1;}void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{strlength(S);int i;for(i=S[0];i>=n;i--)S[i+1]=S[i];S[n]=a;S[S[0]+2]='\0';}int compare(SString S,SString T){strlength(S);strlength(T);int i;for(i=1;i<=S[0]&&i<=T[0];i++){if(S[i]>T[i])return 1;if(S[i]<T[i])return -1;if(S[i]==T[i])continue;}if(S[0]>T[0])return 1;else if(S[0]<T[0])return -1;elsereturn 0;}void concat(SString T1,SString S1,SString S2){strlength(S1);strlength(S2);int i;if(S1[0]+S2[0]<=MAXSTRLEN)//未截断{for(i=1;i<=S1[0];i++)T1[i]=S1[i];for(i=1;i<=S2[0];i++)T1[S1[0]+i]=S2[i];}T1[S1[0]+S2[0]+1]='\0';}void clear(SString S){strlength(S);int i;for(i=1;i<S[0];i++)S[i]='\0';S[0]=0;}int SubString(SString &Sub,SString S,int pos,int len){int i;strlength(S);if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1){printf("Error!position or length is out of range\n");return 0;}for(i=1;i<=len;i++)Sub[i]=S[pos+i-1];Sub[i]='\0';Sub[0]=len;return 1;}int Index(SString S,SString T,int pos) {int i=pos,j=1;strlength(S);strlength(T);while(i<=S[0]&&j<=T[0]){if(S[i]==T[j]){++i;++j;}else{i=i-j+2;j=1;}}if(j>T[0])return i-T[0];else return 0;}void main()// 测试主程序{/*SString S;printf(" 请输入字符串S: ");scanf("%s",S+1);printf("\n");printf(" 输入的字符串为: ");printf("%s",S+1);printf("\n");insert(S,2,'A');printf(" 插入字符后的字符串为:"); printf("%s",S+1);printf("\n");*//*SString T;printf(" 请输入字符串T: ");scanf("%s",T+1);printf("\n");int flag;flag=compare(S,T);printf("%d",flag);*//*SString S1,S2,T1;printf(" 请输入字符串S1:");scanf("%s",S1+1);printf(" 请输入字符串S2:");scanf("%s",S2+1);concat(T1,S1,S2);printf(" 连接的新字符串为: ");printf("%s",T1+1);printf("\n");*//*SString S;printf(" 请输入字符串S: ");scanf("%s",S+1);printf(" 你输入的字符串为: %s\n",S+1); clear(S);printf("%s\n",S+1);*//*SString S,Sub;int pos,len;printf(" 请输入字符串S: ");scanf("%s",S+1);printf(" 请输入子串的位置: ");scanf("%d",&pos);printf(" 请输入子串的长度: ");scanf("%d",&len);if(SubString(Sub,S,pos,len)){printf("\n 子串为: %s\n",Sub+1);printf(" 子串的长度: %d\n",Sub[0]);}*/SString S,T;int pos,r;printf(" 输入主串: ");scanf("%s",S+1);printf(" 输入模式串: ");scanf("%s",T+1);printf(" 请输入起始位置pos:");scanf("%d",&pos);if(r=Index(S,T,pos))printf(" 模式串在主串中的位置为:%d\n",r);else printf("匹配失败! \n");}//字符串中字符频度#include "Stdio.h"#include "stdlib.h"#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN+1]; typedef struct charcp{char zifu;int pingdu;struct charcp *next;}charcp,*Linkchar;void Strlength(SString S){int i;for(i=1;S[i]!='\0';i++);S[0]=i-1;}void Init(Linkchar &cp){cp=(Linkchar)malloc(sizeof(charcp));cp->next=NULL;cp->zifu='\0';cp->pingdu=0;}void Pingdu(SString S,Linkchar &cp){int i=1;charcp *p;charcp *q;while(S[i]!='\0'){p=cp;if(p->zifu=='\0'){p->zifu=S[i];p->pingdu++;i++;continue;}while(p->next!=NULL){if(p->zifu==S[i]){p->pingdu++;break;}p=p->next;}if(p->next==NULL){if(p->zifu==S[i]){p->pingdu++;}else{q=(Linkchar)malloc(sizeof(charcp));q->zifu=S[i];q->pingdu=1;q->next=NULL;p->next=q;}}i++;}}void main(){Linkchar cp;Init(cp);SString S;printf(" 请输入字符串S: ");scanf("%s",S+1);Pingdu(S,cp);charcp *p=cp;while(p!=NULL){printf(" 字符 %c 的频度为 %d \n",p->zifu,p->pingdu);p=p->next;}}。

串的基本操作

串的基本操作

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?五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。

)调试程序时,出现了许多错误。

如:串的堆分配存储结构、串的联接等。

另外还有一些语法上的错误。

由于对所学知识点概念模糊,试验课上未能完成此次上机作业。

后来经过查阅教材,浏览网页等方式,才完成试验。

这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。

以后要都去练习、实践,以完善自己的不足。

串的实验报告总结

串的实验报告总结

串的实验报告总结本次实验旨在研究串(String)数据类型在计算机编程中的应用。

通过对串的基本操作和常见算法进行实验,探索串在字符串处理、文本编辑等方面的实际应用。

本报告将总结实验过程、结果及结论,并提出对进一步研究的展望。

实验内容与方法1.实验内容本次实验主要包括以下内容:-字符串的输入和输出;-串的基本操作,如串的连接、截取、插入等;-串的模式匹配算法,如KMP算法;-串的排序算法,如快速排序。

2.实验方法为了完成上述实验内容,我们采用了以下方法:-使用编程语言(如C++、Java)来实现串数据类型及其相关操作;-设计测试样例,验证实现的正确性和效率;-运行程序,记录实验结果并进行分析。

实验结果与分析经过实验,我们得到了以下结果和分析:1.字符串的输入和输出操作实现了预期的功能,可以正确地读取和显示字符串数据。

2.串的基本操作(连接、截取、插入等)能够正确地处理字符串,并且具有良好的效率。

3.KMP算法作为一种高效的模式匹配算法,能够快速地在文本中搜索指定的模式串,并返回匹配结果。

4.快速排序算法作为一种常用的排序算法,在处理大量字符串数据时表现出了较高的效率。

结论与展望通过本次实验,我们对串数据类型及其基本操作和常见算法有了更深入的理解。

串在计算机编程中具有重要的应用价值,特别是在字符串处理和文本编辑方面。

实验结果显示,实现的串操作功能正常,并且在性能上达到了预期的要求。

然而,本次实验还有改进和拓展的空间。

首先,可以进一步研究优化串的操作效率,提升算法的执行速度。

其次,可以探索更多的串算法,如字符串匹配的其他算法(如BM算法、Trie树等)以及字符串压缩算法等。

此外,可以考虑将串的应用扩展到更多领域,如自然语言处理、数据挖掘等。

综上所述,本次实验对于串数据类型的研究和应用具有重要意义,为进一步深入探索串的应用提供了基础和启示。

我们期待未来在串的研究中取得更多的成果,并将其应用于实际的计算机编程和软件开发中。

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

实验三串基本操作的实现专业:计算机科学与技术班级:10计本1班学号:姓名:实验地点: B102 实验时间: 2011.11.2 指导教师:王润鸿实验目的1 理解定长顺序串的存储结构及基本操作的定义;2掌握定长顺序串的基本操作;3学会设计实验数据验证程序。

实验环境计算机,window xp操作系统,VC++6.0实验内容1. 存储结构定义:#define MAXSTRLEN 255 //串的长度最大为255typedef unsigned char SString[MAXSTRLEN+1];//0号单元存放串的长度,其最大值刚好是2552. 实现的基本操作:StrAssign (&T, chars)初始条件:chars 是串常量。

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

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 序列中的字符个数,即串的长度。

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

操作结果:将S 清为空串。

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

操作结果:用T 返回由S1 和S2 联接而成的新串。

SubString (&Sub, S, pos, len)初始条件:串S存在,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1。

操作结果:用Sub 返回串S的第pos 个字符起长度为len 的子串。

Index (S, T, pos)初始条件:串S和T存在,T 是非空串,1≤pos≤StrLength(S)。

操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos 个字符之后第一次出现的位置;否则函数值为0。

Replace (&S, T, V)初始条件:串S,T 和V 存在,T 是非空串。

操作结果:用V替换主串S中出现的所有与T相等的不重叠的子串。

StrInsert (&S, pos, T)初始条件:串S 和T 存在,1≤pos≤StrLength(S)+1。

操作结果:在串S 的第pos 个字符之前插入串T。

StrDelete (&S, pos, len)初始条件:串S 存在,1≤pos≤StrLength(S)-len+1。

操作结果:从串S 中删除第pos 个字符起长度为len 的子串。

3. 测试及实验结果(1) 建立如下字符串S1:“输入结点值的顺序必须对应二叉树结点前序遍历的顺序。

并约定以输入序列中不可能出现的值作为空结点的值以结束递归。

”(2) 输出S1;(3) 查找“二叉树”出现的位序;(4) 将文中的”顺序”改为”次序”;(5) 建立如下字符串S2:例如用“@”或用“-1”表示字符序列或正整数序列空结点。

(6) 将S1串与S2串连接成S串;(7) 输出S串的值与串的长度;(8) 删除S1串和S2串;实验记录#include <stdio.h>#include <stdlib.h>#include <String.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define MAXSTRLEN 255typedef int Status;typedef unsigned char SString[MAXSTRLEN+1];Status StrAssign(SString T,char *chars){ // 生成一个其值等于chars的串T int i;if(strlen(chars)>MAXSTRLEN)return ERROR;else{T[0]=strlen(chars);for(i=1;i<=T[0];i++)T[i]=*(chars+i-1);return OK;}}void StrCopy(SString T,SString S){ // 由串S复制得串Tint i;for(i=0;i<=S[0];i++)T[i]=S[i];}Status StrEmpty(SString S){ // 若S为空串,则返回TRUE,否则返回FALSE if(S[0]==0)return TRUE;elsereturn FALSE;}int StrCompare(SString S,SString T){int i;for(i=1;i<=S[0]&&i<=T[0];++i)if(S[i]!=T[i])return S[i]-T[i];return S[0]-T[0];}int StrLength(SString S) { // 返回串S的元素个数return S[0];}void ClearString(SString S){ // 初始条件:串S存在。

操作结果:将S清为空串S[0]=0; // 令串长为零}Status Concat(SString T,SString S1,SString S2) // 算法4.2改{ // 用T返回S1和S2联接而成的新串。

若未截断,则返回TRUE,否则FALSE int i;if(S1[0]+S2[0]<=MAXSTRLEN){ // 未截断for(i=1;i<=S1[0];i++)T[i]=S1[i];for(i=1;i<=S2[0];i++)T[S1[0]+i]=S2[i];T[0]=S1[0]+S2[0];return TRUE;}else{ // 截断S2for(i=1;i<=S1[0];i++)T[i]=S1[i];for(i=1;i<=MAXSTRLEN-S1[0];i++)T[S1[0]+i]=S2[i];T[0]=MAXSTRLEN;return FALSE;}}Status SubString(SString Sub,SString S,int pos,int len){ // 用Sub返回串S的第pos个字符起长度为len的子串。

算法4.3 int i;if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)return ERROR;for(i=1;i<=len;i++)Sub[i]=S[pos+i-1];Sub[0]=len;return OK;}Status Index(SString S,SString T,int pos){int i=pos; int j=1;while(i<=S[0]&&j<=T[0]){if(S[i]==T[j]) { ++i; ++j;}else { i=i-j+2; j=1; }}if(j>T[0]) return i-T[0];else return 0;}Status StrInsert(SString S,int pos,SString T){int i;if(pos<1||pos>S[0]+1)return ERROR;if(S[0]+T[0]<=MAXSTRLEN){for(i=S[0];i>=pos;i--)S[i+T[0]]=S[i];for(i=pos;i<pos+T[0];i++)S[i]=T[i-pos+1];S[0]=S[0]+T[0];return TRUE;}else{for(i=MAXSTRLEN;i>=pos;i--)S[i]=S[i-T[0]];for(i=pos;i<pos+T[0];i++)S[i]=T[i-pos+1];S[0]=MAXSTRLEN;return FALSE;}}Status StrDelete(SString S,int pos,int len){ int i;if(pos<1||pos>S[0]-len+1||len<0)return ERROR;for(i=pos+len;i<=S[0];i++)S[i-len]=S[i];S[0]-=len;return OK;}Status Replace(SString S,SString T,SString V){ int i=1;if(StrEmpty(T)) return ERROR;do{i=Index(S,T,i);if(i){StrDelete(S,i,StrLength(T));StrInsert(S,i,V);i+=StrLength(V);}}while(i);return OK;}void StrPrint(SString T) { // 输出字符串T。

另加int i;for(i=1;i<=T[0];i++)printf("%c",T[i]);printf("\n");}void main(){int i,j;char c[MAXSTRLEN+1];SString T,S1,S2,S,V;printf("输入S1:");gets(c);StrAssign(S1,c);printf("输出S1:");StrPrint(S1);printf("输入要查找的字符串:");gets(c);StrAssign(T,c);printf("出现的位序是:%d\n",Index(S1,T,1));printf("要改的字符串是:");gets(c);StrAssign(T,c);printf("要换成的字符串是:");gets(c);StrAssign(V,c);Replace(S1,T,V);printf("此时的S1是:");StrPrint(S1);printf("请输入串S2:");gets(c);StrAssign(S2,c);printf("输出S2:");StrPrint(S2);Concat(S,S1,S2);printf("串S1联接串S2得到的串S为: ");StrPrint(S);printf("串S的长度为:%d\n", StrLength(S));printf("请删除S1\n");StrDelete(S,1,StrLength(S1));printf("此时串S为:");StrPrint(S);printf("请删除S2\n");StrDelete(S,1,StrLength(S2));printf("此时串S为:");StrPrint(S);}。

相关文档
最新文档