实验三串基本操作的编程实现
实验三串基本操作的编程实现
实验三串基本操作的编程实现引言:串是由零个或多个字符组成的有限序列,是一种非常基础也非常重要的数据结构。
在本实验中,我们将学习串的基本操作,并使用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实验总结:本次实验主要是对顺序串的基本操作进行了实现和验证。
串代码的实验报告
一、实验目的1. 熟悉串代码编程的基本概念和语法;2. 掌握串代码编程的基本操作,如变量定义、数据类型、运算符、控制结构等;3. 培养解决实际问题的能力,提高编程水平。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio Code3. 语言:Python三、实验内容1. 实验一:变量定义和数据类型(1)编写代码定义变量,并打印变量的值。
```python# 变量定义a = 10b = 3.14c = "Hello, World!"# 打印变量的值print("a =", a)print("b =", b)print("c =", c)```(2)编写代码进行数据类型转换。
```python# 数据类型转换a = int(3.14)b = float(10)c = str("100")# 打印转换后的值print("a =", a)print("b =", b)print("c =", c)```2. 实验二:运算符和表达式(1)编写代码进行基本的数学运算。
```python# 基本的数学运算x = 5y = 3result = x + y # 加法result -= y # 减法result = 2 # 乘法result /= 2 # 除法result %= 2 # 取余result = 2 # 幂运算# 打印运算结果print("result =", result)```(2)编写代码进行逻辑运算。
```python# 逻辑运算x = Truey = Falseresult = x and y # 与运算result = x or y # 或运算result = not x # 非运算# 打印运算结果print("result =", result)```3. 实验三:控制结构(1)编写代码实现简单的条件语句。
实现串的基本操作
实现串的基本操作一、前言在计算机科学中,串(string)是由零个或多个字符组成的有限序列。
它是计算机科学中基本的数据结构之一,常用于文本处理和数据压缩等领域。
串的基本操作包括:串的创建、串的赋值、串的连接、串的比较、子串的提取、插入和删除等。
本文将详细介绍这些操作。
二、串的创建1. 静态创建静态创建是指在程序运行前就已经确定了字符串内容,并将其存储在静态存储区中。
这种方式通常用于存储不会发生变化的字符串,如程序中使用的提示信息等。
静态创建示例:char str[] = "Hello, world!";2. 动态创建动态创建是指在程序运行时根据需要动态分配内存空间来存储字符串。
这种方式通常用于存储需要动态改变的字符串,如用户输入的信息等。
动态创建示例:char *str = (char*)malloc(sizeof(char)*20);strcpy(str, "Hello, world!");三、串的赋值1. 直接赋值直接赋值是指将一个已有字符串直接赋给另一个字符串。
直接赋值示例:char str1[] = "Hello";char str2[10];str2 = str1;2. 字符数组赋值字符数组赋值是指将一个字符数组中的内容赋给另一个字符数组。
字符数组赋值示例:char str1[] = "Hello";char str2[10];strcpy(str2, str1);3. 指针赋值指针赋值是指将一个指向字符串的指针赋给另一个指向字符串的指针。
指针赋值示例:char *str1 = "Hello";char *str2;str2 = str1;四、串的连接串的连接是指将两个字符串合并为一个字符串。
串的连接示例:char str1[] = "Hello";char str2[] = ", world!";strcat(str1, str2);五、串的比较串的比较是指判断两个字符串是否相等。
串基本操作的编程实现
串基本操作的编程实现串(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. 串的比较比较是指判断两个串是否相等。
数据结构-顺序串基本操作实验报告
数据结构\顺序串基本操作实验报告实验报告数据结构\顺序串基本操作一、实验目的本实验旨在通过实践,掌握顺序串的基本操作,包括顺序串的初始化、销毁、插入、删除和查找等。
二、实验内容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)返回相等元素的位置。
四、实验结果与分析根据实验步骤,我们可以完成顺序串的初始化、销毁、插入、删除和查找等基本操作。
通过这些操作,我们可以对顺序串进行各种元素的插入、删除和查找操作,方便实现顺序串的各种功能。
串操作实验报告
竭诚为您提供优质文档/双击可除串操作实验报告篇一:顺序串的基本操作实验报告宁波工程学院电信学院计算机教研室实验报告课程名称:数据结构实验项目:顺序串的基本操作实验人员:徐浩学号: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.子串的查找三、实验步骤与实现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来实现串的基本操作。
串的基本操作和简程序实验心得
串的基本操作包括: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;}```实验心得:通过这个简单的程序,我了解了串的基本操作和实现方法。
串的基本操作实现源码
*tmp++ = *stmp++;
}
for ( i = 0; i != T.length; ++i)
{
++stmp;
}
for ( i = 0; i != V.length; ++i)
{
*tmp++ = *vtmp++;
}
while(*stmp)
{
*tmp++ = *stmp++;
}
*tmp = '\0';
{
++Str.ch;
}
for ( i = pos; i != Str.length - T.length + 2; ++i)
{
if (*Str.ch == *T.ch)
{
bool flag = true;
char *Stmp = Str.ch;
char *Ttmp = T.ch;
while(*Ttmp)
int StrCompare(HString Str, HString T)
{
if ((!T.ch)||(!Str.ch))
{
printf("StrCompare()函数执行,程序即将退出\n");
system("pause");
exit(0);
}
int flag = 0;
for (int i = 0; (i < Str.length)&&(i < T.length); ++i)
delete Str.ch;
串及其应用的实验报告
一、实验目的1. 理解串的概念及其基本操作。
2. 掌握串的创建、插入、删除、查找等操作。
3. 学习串在具体应用场景中的应用。
二、实验原理串(String)是一种特殊的线性表,它是由若干字符构成的有限序列。
串的基本操作包括创建、插入、删除、查找等。
在计算机科学中,串广泛应用于文本处理、字符串匹配、自然语言处理等领域。
三、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019四、实验内容1. 串的创建2. 串的插入3. 串的删除4. 串的查找5. 串在文本处理中的应用五、实验步骤1. 串的创建(1)定义串的结构体```cppstruct String {char data; // 指向串中字符的指针int length; // 串的长度};```(2)创建串```cppString createString(const char str) {String s;s.data = new char[strlen(str) + 1]; // 为串分配内存strcpy(s.data, str); // 复制字符串到串中s.length = strlen(str); // 设置串的长度return s;}```2. 串的插入(1)在串的指定位置插入字符```cppvoid insertChar(String& s, int position, char ch) {if (position < 0 || position > s.length) {return; // 插入位置不合法}char newData = new char[s.length + 2]; // 为新串分配内存 strcpy(newData, s.data); // 复制原串到新串newData[position] = ch; // 在指定位置插入字符strcpy(s.data, newData); // 复制新串到原串s.length++; // 更新串的长度}```(2)在串的指定位置插入子串```cppvoid insertSubstring(String& s, int position, const char subStr) {if (position < 0 || position > s.length) {return; // 插入位置不合法}char newData = new char[s.length + strlen(subStr) + 1]; // 为新串分配内存strcpy(newData, s.data); // 复制原串到新串strcpy(newData + position, subStr); // 在指定位置插入子串strcpy(s.data, newData); // 复制新串到原串s.length += strlen(subStr); // 更新串的长度}```3. 串的删除(1)删除串中的单个字符```cppvoid deleteChar(String& s, int position) {if (position < 0 || position >= s.length) {return; // 删除位置不合法}char newData = new char[s.length]; // 为新串分配内存strcpy(newData, s.data); // 复制原串到新串strcpy(newData + position, newData + position + 1); // 删除指定位置的字符strcpy(s.data, newData); // 复制新串到原串s.length--; // 更新串的长度}```(2)删除串中的子串```cppvoid deleteSubstring(String& s, const char subStr) {int position = s.indexOf(subStr); // 查找子串的位置if (position == -1) {return; // 子串不存在}deleteChar(s, position); // 删除子串}```4. 串的查找(1)查找串中的单个字符```cppint indexOfChar(const String& s, char ch) {for (int i = 0; i < s.length; i++) {if (s.data[i] == ch) {return i; // 找到字符,返回位置}}return -1; // 未找到字符,返回-1}```(2)查找串中的子串```cppint indexOfSubstring(const String& s, const char subStr) {for (int i = 0; i <= s.length - strlen(subStr); i++) {if (strncmp(s.data + i, subStr, strlen(subStr)) == 0) {return i; // 找到子串,返回位置}}return -1; // 未找到子串,返回-1}```5. 串在文本处理中的应用(1)字符串替换```cppvoid replaceSubstring(String& s, const char oldStr, const char newStr) { int position = indexOfSubstring(s, oldStr);while (position != -1) {deleteSubstring(s, oldStr); // 删除旧子串insertSubstring(s, position, newStr); // 插入新子串position = indexOfSubstring(s, oldStr); // 继续查找旧子串}}```(2)字符串排序```cppvoid sortString(String& s) {char temp = new char[s.length + 1];strcpy(temp, s.data);qsort(temp, s.length, sizeof(char), [](const void a, const void b) { return (const char)a - (const char)b;});strcpy(s.data, temp);delete[] temp;}```六、实验结果与分析1. 创建串:通过创建一个包含“Hello, World!”的串,验证了串的创建功能。
串的基本操作
一.实验目的如果计算机语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。
试着实现串类型,并写一个串的基本操作演示系统。
二.实验内容实现若干串的常用基本操作,如串赋值、求串长、串替换、串比较、求子串及串的模式匹配等。
模块设计本程序包含两个模块:主程序模块、串操作模块。
其调用关系如图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);}四.实验的结果及分析。
基本编程语句实验报告(3篇)
第1篇一、实验目的1. 熟悉编程语言的基本语法和结构。
2. 掌握基本编程语句的用法。
3. 培养逻辑思维和编程能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容本次实验主要涉及以下基本编程语句:1. 变量赋值与输出2. 数据类型转换3. 运算符4. 控制语句5. 函数定义与调用四、实验步骤1. 变量赋值与输出(1)创建一个变量,用于存储姓名。
```pythonname = "张三"```(2)输出姓名。
print("姓名:", name)```2. 数据类型转换(1)将字符串转换为整数。
```pythonage = int("25")```(2)输出年龄。
```pythonprint("年龄:", age)```3. 运算符(1)使用加法运算符计算两个整数的和。
```pythonnum1 = 10num2 = 20sum = num1 + num2```(2)输出结果。
```pythonprint("两个整数的和为:", sum)```(1)使用if语句判断年龄是否大于18。
```pythonage = 20if age > 18:print("已成年")else:print("未成年")```5. 函数定义与调用(1)定义一个函数,用于计算两个数的最大值。
```pythondef max_num(a, b):if a > b:return aelse:return b```(2)调用函数,输出两个数的最大值。
```pythonnum1 = 10num2 = 20max_value = max_num(num1, num2)print("两个数的最大值为:", max_value)```五、实验结果与分析1. 变量赋值与输出:通过创建变量和输出语句,实现了对数据的存储和显示。
串操作实验报告
串操作实验报告串操作实验报告引言:串操作是计算机科学中的一项基本操作,它涉及到对字符串的处理和操作。
在本次实验中,我们将学习和掌握一些常见的串操作技术,并通过实际操作加深对这些技术的理解和应用。
实验目的:1. 掌握字符串的基本概念和表示方法;2. 学习串的初始化、赋值和销毁操作;3. 熟悉串的基本操作,如求串的长度、比较串、连接串等;4. 掌握串的模式匹配算法。
实验过程:1. 字符串的初始化和赋值在本次实验中,我们使用C语言来进行串操作的实现。
首先,我们需要初始化一个字符串,并为其分配内存空间。
然后,我们可以通过赋值操作将一个字符串赋给另一个字符串。
这样,我们就可以对这个字符串进行各种操作。
2. 求串的长度求串的长度是串操作中的一个基本操作。
我们可以通过遍历字符串中的每一个字符,并计数来得到字符串的长度。
在实际操作中,我们可以使用strlen()函数来实现这个功能。
3. 比较串比较串是判断两个字符串是否相等的操作。
我们可以逐个字符地比较两个字符串中的字符,如果所有字符都相等,则认为两个字符串相等。
在实际操作中,我们可以使用strcmp()函数来实现这个功能。
4. 连接串连接串是将两个字符串连接成一个新的字符串的操作。
我们可以先计算出新字符串的长度,然后将两个字符串中的字符逐个复制到新的字符串中。
在实际操作中,我们可以使用strcat()函数来实现这个功能。
5. 串的模式匹配串的模式匹配是在一个字符串中查找另一个字符串的操作。
我们可以通过遍历字符串中的每一个字符,并与目标字符串进行比较来实现这个功能。
在实际操作中,我们可以使用strstr()函数来实现这个功能。
实验结果:通过实验,我们成功地完成了串操作的各项任务。
我们学会了如何初始化和赋值字符串,如何求串的长度,如何比较和连接串,以及如何进行串的模式匹配。
这些技术对于我们在日后的编程工作中处理字符串将会非常有帮助。
结论:串操作是计算机科学中的一项基本操作,它对于我们处理字符串非常重要。
《数据结构》实验书
目录实验一线性表基本操作的编程实现 (201)实验二堆栈或队列基本操作的编程实现 (49)实验四二维数组基本操作的编程实现 (18)实验五二叉树基操作的编程实现 (20)实验六图基本操作的编程实现 (45)(特别提示:程序设计包含两个方面的错误。
其一是错误,其二是能错误。
为了提高学生的编程和能力,本指导书给出的程序代码并的两种错误。
并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的要求。
希望大家以自己所学高级语言的基本功和点为基础,不要过于依赖给出的参考代码,这样才能有所进步。
如果学生能够根据要求完全自己编制,那就不好了。
)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结分主要功能,也可以用菜单进行管理完成大部分功能。
还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。
建议实现键盘输入数据以实现程序的通据的函数。
【注意事项】【思考问题】1.线性表的顺序存储和链表存储的差异?优缺点分析?2.那些操作引发了数据的移动?3.算法的时间效率是如何体现的?4.链表的指针是如何后移的?如何加强程序的健壮性?【参考代码】(一)利用顺序表完成一个班级学生课程成绩的简单管理1、预定义以及顺序表结构类型的定义(1)#define ListSize //根据需要自己设定一个班级能够容纳的最大学生数(2)typedef struct Stu{int num; //学生的学号char name[10]; //学生的姓名float wuli; //物理成绩float shuxue; //数学成绩float yingyu; //英语成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct List{stu[ListSize]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型2、建立班级的学生信息void listcreate(LIST *Li,int m) //m为该班级的实际人数{int i;Li->length=0;for(i=0;i<m;i++) //输入m个学生的所有信息{printf("please input the %dth student's information:\n",i+1);printf("num=");scanf("%d", ); //输入第i个学生的学号printf("name=");scanf("%s", ); //输入第i个学生的姓名printf("wuli=");scanf("%f", ); //输入第i个学生的物理成绩printf("shuxue=");scanf("%f", ); //输入第i个学生的数学成绩printf("yingyu=");scanf("%f", ); //输入第i个学生的英语成绩Li->length++; //学生人数加1}}3、插入一个学生信息int listinsert(LIST *Li,int i) //将学生插入到班级Li的第i个位置。
串的基本操作的编程实现
串的基本操作的编程实现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. 提高对数据结构操作的理解和编程能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019三、实验内容1. 创建串2. 插入字符3. 删除字符4. 查找字符5. 合并串6. 判断串是否为空7. 获取串的长度8. 反转串四、实验步骤1. 创建串```cpp#include <iostream>#include <string>using namespace std;int main() {string str1 = "Hello";string str2 = "World";return 0;}```2. 插入字符```cppint main() {string str = "Hello";int position = 3;char ch = 'W';str.insert(position, 1, ch);cout << str << endl; // 输出:HWeHllo return 0;}```3. 删除字符```cppint main() {string str = "Hello";int position = 2;int length = 2;str.erase(position, length);cout << str << endl; // 输出:Hereturn 0;}```4. 查找字符```cppint main() {string str = "Hello";char ch = 'e';size_t position = str.find(ch);cout << position << endl; // 输出:1return 0;}```5. 合并串```cppint main() {string str1 = "Hello";string str2 = "World";string str3 = str1 + str2;cout << str3 << endl; // 输出:HelloWorld return 0;}```6. 判断串是否为空```cppint main() {string str1 = "Hello";string str2 = "";if (str1.empty()) {cout << "str1 is empty" << endl;} else {cout << "str1 is not empty" << endl; }if (str2.empty()) {cout << "str2 is empty" << endl;} else {cout << "str2 is not empty" << endl; }return 0;}```7. 获取串的长度```cppint main() {string str = "Hello";int length = str.length();cout << length << endl; // 输出:5return 0;}```8. 反转串```cppint main() {string str = "Hello";reverse(str.begin(), str.end());cout << str << endl; // 输出:olleHreturn 0;}```五、实验结果与分析通过以上实验,我们成功实现了串的基本操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
for(j=0;j<=9;j++)
cout<<j;
}
cout<<endl;
cout<<"当前串: ";
for(i=0;i<length;i++)
cout<<str[i];
cout<<endl;
}
else
cout<<"字符串为空!"<<endl;
}
int string::strlength()
str[i]=char(ch);
else i=i-1;
cout.flush();//为了每次输入后可以立即显示所输入的字符,则先清除缓冲区
}
length=i+1;
cout<<endl;
return success;
}
returninfo string::strinsert(int position,char newstr[],int str_length)
if(returnvalue==success)
{
cout<<"修改成功!"<<endl;
newstring.strtraverse();
}
if(returnvalue==overflow)
{
cout<<"字符串的最大长度为"<<maxsize<<endl;
cout<<"发生溢出,操作失败!"<<endl;
【实验性质】
验证性实验(学时数:2H)
【实验容】
字符串用常规的顺序存储法来存储,实现常用的功能。
自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。
修改程序模式:将下面程序空白的地方填空。
程序检查模式:将本文件夹中的程序运行后总结相关功能。
【思考问题】
1.字符串的顺序存储和链表存储的差异?C语言中是如何实现字符串的?
cin>>beginposition;
cout<<"请输入要修改的终止位置:";
cin>>endposition;
cout<<"请输入修改后的字符串:";
cin>>newstr;
returnvalue=newstring.strmodify(beginposition,endposition,newstr);
}
if(returnvalue==range_error)
cout<<"位置错误,操作失败!"<<endl;
}
break;
case '5':
if(flag==0)
cout<<"请先建立串!"<<endl;
else
{
newstring.strtraverse();
cout<<"请输入要删除的初始位置:";
enum returninfo{success,fail,overflow,underflow,range_error,empty};//定义返回信息清单
class string
{
public:
string();//构造函数
~string();//析构函数
returninfo strcreate(); //创建串
cout<<"请先建立串!"<<endl;
else
{
newstring.strtraverse();
cout<<"请输入要查找的字符串:";
cin>>newstr;
position=newstring.strsearch(newstr);
if(position>0)
{
cout<<"已找到!"<<endl;
cout<<"创建成功!"<<endl;
flag=1;
}
else
cout<<"输入错误!"<<endl;
}
else
{
returnvalue=newstring.strcreate();
if(returnvalue==success)
cout<<"创建成功!"<<endl;
flag=1;
}
break;
cin>>beginposition;
cout<<"请输入要删除的终止位置:";
cin>>endposition;
returnvalue=newstring.strdelete(beginposition,endposition);
if(returnvalue==success)
{
cout<<"删除成功!"<<endl;
for(;i<length&&count<str_length;i++)
{
if(str[i]==newstr[count])
{position=i-str_length+2;count++;continue;}
else
{
if(position==1)
i=i-count;
count=0;
position=0;
if(returnvalue==success)
{
cout<<"插入成功!"<<endl;
newstring.strtraverse();
}
if(returnvalue==overflow)
{
cout<<"字符串的最大长度为"<<maxsize<<endl;
cout<<"发生溢出,操作失败!"<<endl;
else
{
newstring.strtraverse();
length=newstring.strlength();
cout<<"当前串的长度为:"<<length<<endl;
}
break;
case '8':
exit(0);
break;
default:
cout<<"输入错误!\n";break;
}
else
{
newstring.strtraverse();
cout<<"请输入要插入的位置:";
cin>>position;
cout<<"请输入要插入的字符串:";
cin>>newstr;
length=strlen(newstr);
returnvalue=newstring.strinsert(position,newstr,length);
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;
2.在字符串处理方面主要有什么操作?
3.字符串的操作的主要特点是什么?
4.举出几个字符串的应用例?
【参考代码】
//功能:顺序串的基本基本功能
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <iomanip.h>
#define maxsize 30//顺序串的总空间大小
//当插入的字符串在原串末尾时,就相当于合并
{
return success;
}
returninfo string::strdelete(int beginposition,int endposition)
{
return success;
}
returninfo string::strmodify(int beginposition,int endposition,char newstr[])
}
string::~string()
{}
returninfo string::strcreate()
{
int i=-1,ch;
cout<<"请输入要创建的字符串(ctrl+z结束输入):"<<endl;