【数据结构实验三】串
来源:互联网 发布:jsp java注释 编辑:程序博客网 时间:2024/05/14 06:46
版权申明:
本实验的实验目的,实验内容,实验要求归东北大学所有,未经许可禁止转载。
实验三 串
实验目的:
掌握字符串堆分配存储的构造与输出操作;利用求串长、串比较、求子串操作实现串的模式匹配(index)。
实验内容:
1. 通过结构体声明堆存储的串,并构造一个串;
2. 实现串的输出;
3. 编写求串长、串比较、求子串操作;
4. 根据3中的操作,实现串的模式匹配;
5. 在主函数中声明两个串,通过模式匹配测试一个串是否存在于另一个串中。源码:
#include "stdafx.h"#include <iostream>using namespace std;typedef int Status;/***********类型定义***********/typedef struct hstring{char *ch; //串指针int length; //串长}HString;/***********函数申明***********/Status StrAssign(HString &T, char *chars); //构造串int StrLength(HString S); //计算串长int StrCompare(HString S, HString T); //串比较Status SubString(HString &Sub, HString S, int pos, int len); //取子串int Index(HString S, HString T, int pos); //模式匹配void StrPrint(HString S); //输出/***********函数实现***********//***********构造串***********/Status StrAssign(HString &T, char *chars){int i, j;char *c;//if(T.ch) free(T.ch);for(i = 0, c = chars; *c; ++i, ++c); //测定串长if(!i){T.ch = NULL;T.length = 0;}else{if(!(T.ch = (char *)malloc(i * sizeof(char)))) exit(OVERFLOW);for(j = 0; j <= i - 1; ++j){T.ch[j] = chars[j];}T.length = i;}return OK;}/***********输出串***********/void StrPrint(HString S){int j;for(j = 0; j <= S.length - 1; ++j)cout << S.ch[j];cout << endl;}/***********串比较***********/int StrCompare(HString S, HString T){int i;for(i = 0; i < S.length && i < T.length; ++i){if(S.ch[i] != T.ch[i])return S.ch[i] - T.ch[i];}return S.length - T.length;}/***********计算串长***********/int StrLength(HString S){return S.length;}/***********取子串***********/Status SubString(HString &Sub, HString S, int pos, int len){int j;if(pos < 1 || pos > S.length || len < 0 || len > S.length - pos + 1)return ERROR;//if(Sub.ch) delete(Sub.ch);if(!len){Sub.ch = NULL;Sub.length = 0;}else{Sub.ch = (char *)malloc(len * sizeof(char));for(j = 0; j < len; ++j){Sub.ch[j] = S.ch[j + pos - 1];Sub.length = len;}}return OK;}/***********模式匹配***********/int Index(HString S, HString T, int pos){int n, m ,i;HString sub;if(pos > 0){n = StrLength(S);m = StrLength(T);i = pos;}while(i <= n - m + 1){SubString(sub, S, i, m);if((StrCompare(sub, T)) != 0) ++i;elsereturn i;}return 0;}/***********主函数***********/int main(){ HString S = {NULL,0}, S1 = {NULL,0}, S2 = {NULL,0}, sub = {NULL,0}; char *mainstring = "HelloWorld5555"; //char *substring = "World"; StrAssign(S1, mainstring); //StrAssign(S2, substring); StrAssign(S2, "World"); cout << "S1: "; StrPrint(S1); cout << "The length of S1 is " << StrLength(S1) << endl; cout << "S2: "; StrPrint(S2); cout << "The length of S2 is " << StrLength(S2) << endl; cout << "The location is " << Index(S1, S2, 1) << endl; SubString(sub, S1, 6, 7); cout << "the SubString is "; StrPrint(sub); cout << "StrCompare: " << StrCompare(S2, S1) << endl; return 0;}
这里注意一下,取子串和构造串中注释的部分是释放内存语句,可以不要。注意一下主函数中对于S1,S2的初始化和赋值语句的不同。
0 0
- 【数据结构实验三】串
- 数据结构实验之串三
- 数据结构实验之串三:KMP应用
- 数据结构x实验三--串的操作
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 笔记——简单标记与标记库描述文件(TLD)
- 基于Struts2+Hibernate 基本配置
- matlab函数
- A*和K短路
- C++指针理解笔记(2)
- 【数据结构实验三】串
- 数组里面的数字的组合为某个和以及二叉树的某个路径的和为某值的全部路径
- 差分约束模板题_poj3159
- Maximum Product Subarray
- pandas学习笔记-丢弃指定轴上的项
- Typora使用指南
- Struts2的Annotation使用
- CentOS 开放端口
- MIT18.06课程笔记15:Projection Matrix投射矩阵