建立顺序串的算法库
本次实践将建立顺序串的算法库,这样可以方便的将此算法运用于我们的所需的工程中,简化操作。
本次实践将用到多文件组织工程的建立,建立方法可以点击此处参照。(工程环境:Visual C++ 6.0)
工程建好的文件视图如下:
其源代码如下:
1.sqString.h
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :sqString.h*
//*作者:田长航*
//*完成时间:2017年10月19日*
//*版本号:v1.0*
//*问题描述:定义顺序串数据结构的代码、宏定义、要实现算法的函数的声明*
//*输入描述:无*
//*程序输出:无*
#ifndef SqString_H_INCLUDED
#define SqString_H_INCLUDED#define MaxSize 100             //最多的字符个数
typedef struct
{   char data[MaxSize];         //定义可容纳MaxSize个字符的空间int length;                 //标记当前实际串长
} SqString;void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s
void StrCopy(SqString &s,SqString t);   //串t复制给串s
bool StrEqual(SqString s,SqString t); //判串相等
int StrLength(SqString s);  //求串长
SqString Concat(SqString s,SqString t);  //串连接
SqString SubStr(SqString s,int i,int j); //求子串
SqString InsStr(SqString s1,int i,SqString s2); //串插入
SqString DelStr(SqString s,int i,int j) ;   //串删去
SqString RepStr(SqString s,int i,int j,SqString t);     //串替换
void DispStr(SqString s);   //输出串#endif // SqString_H_INCLUDED
2.sqString.cpp
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :sqString.cpp*
//*作者:田长航*
//*完成时间:2017年10月19日*
//*版本号:v1.0*
//*问题描述:各种算法的函数的定义*
//*输入描述:无*
//*程序输出:无*
#include <stdio.h>
#include <malloc.h>
#include "SqString.h"void StrAssign(SqString &s,char cstr[]) //s为引用型参数
{   int i;for (i=0;cstr[i]!='\0';i++)s.data[i]=cstr[i];s.length=i;
}
void StrCopy(SqString &s,SqString t)    //s为引用型参数
{   int i;for (i=0;i<t.length;i++)s.data[i]=t.data[i];s.length=t.length;
}
bool StrEqual(SqString s,SqString t)
{   bool same=true;int i;if (s.length!=t.length)             //长度不相等时返回0same=false;elsefor (i=0;i<s.length;i++)if (s.data[i]!=t.data[i])   //有一个对应字符不相同时返回0{   same=false;break;}return same;
}
int StrLength(SqString s)
{return s.length;
}
SqString Concat(SqString s,SqString t)
{   SqString str;int i;str.length=s.length+t.length;for (i=0;i<s.length;i++)    //将s.data[0..s.length-1]复制到strstr.data[i]=s.data[i];for (i=0;i<t.length;i++)    //将t.data[0..t.length-1]复制到strstr.data[s.length+i]=t.data[i];return str;
}
SqString SubStr(SqString s,int i,int j)
{   SqString str;int k;str.length=0;if (i<=0 || i>s.length || j<0 || i+j-1>s.length)return str;                 //参数不正确时返回空串for (k=i-1;k<i+j-1;k++)         //将s.data[i..i+j]复制到strstr.data[k-i+1]=s.data[k];str.length=j;return str;
}
SqString InsStr(SqString s1,int i,SqString s2)
{   int j;SqString str;str.length=0;if (i<=0 || i>s1.length+1)  //参数不正确时返回空串return str;for (j=0;j<i-1;j++)             //将s1.data[0..i-2]复制到strstr.data[j]=s1.data[j];for (j=0;j<s2.length;j++)       //将s2.data[0..s2.length-1]复制到strstr.data[i+j-1]=s2.data[j];for (j=i-1;j<s1.length;j++)     //将s1.data[i-1..s1.length-1]复制到strstr.data[s2.length+j]=s1.data[j];str.length=s1.length+s2.length;return str;
}
SqString DelStr(SqString s,int i,int j)
{   int k;SqString str;str.length=0;if (i<=0 || i>s.length || i+j>s.length+1) //参数不正确时返回空串return str;for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到strstr.data[k]=s.data[k];for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到strstr.data[k-j]=s.data[k];str.length=s.length-j;return str;
}
SqString RepStr(SqString s,int i,int j,SqString t)
{   int k;SqString str;str.length=0;if (i<=0 || i>s.length || i+j-1>s.length) //参数不正确时返回空串return str;for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到strstr.data[k]=s.data[k];for (k=0;k<t.length;k++)        //将t.data[0..t.length-1]复制到strstr.data[i+k-1]=t.data[k];for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到strstr.data[t.length+k-j]=s.data[k];str.length=s.length-j+t.length;return str;
}
void DispStr(SqString s)
{   int i;if (s.length>0){   for (i=0;i<s.length;i++)printf("%c",s.data[i]);printf("\n");}
}
3.main.cpp
//*Copyright  (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :main.cpp*
//*作者:田长航*
//*完成时间:2017年10月19日*
//*版本号:v1.0*
//*问题描述:算法库测试函数*
//*输入描述:无*
//*程序输出:测试结果*
#include <stdio.h>
#include "sqString.h"
int main()
{SqString s,s1,s2,s3,s4;printf("链串的基本运算如下:\n");printf("  (1)建立串s和串s1\n");StrAssign(s,"abcdefghijklmn");printf("  (2)输出串s:");DispStr(s);StrAssign(s1,"123");printf("  (2)输出串s1:");DispStr(s1);printf("  (3)串s的长度:%d\n",StrLength(s));printf("  (4)在串s的第9个字符位置插入串s1而产生串s2\n");s2=InsStr(s,9,s1);printf("  (5)输出串s2:");DispStr(s2);printf("  (6)删除串s第2个字符开始的5个字符而产生串s2\n");s2=DelStr(s,2,5);printf("  (7)输出串s2:");DispStr(s2);printf("  (8)将串s第2个字符开始的5个字符替换成串s1而产生串s2\n");s2=RepStr(s,2,5,s1);printf("  (9)输出串s2:");DispStr(s2);printf("  (10)提取串s的第2个字符开始的10个字符而产生串s3\n");s3=SubStr(s,2,10);printf("  (11)输出串s3:");DispStr(s3);printf("  (12)将串s1和串s2连接起来而产生串s4\n");s4=Concat(s1,s2);printf("  (13)输出串s4:");DispStr(s4);return 0;
}
运行结果截图如下:

数据结构上机实践第八周项目1- 建立顺序串的算法库相关推荐

  1. 数据结构上机实践第八周项目2- 建立链串的算法库

    建立链串的算法库 一般每一种数据结构都不会局限于在连续空间内的存取,那我们的串自然也不反常,本次实践将建立链串的算法库,应用于有需求的工程当中,提高程序的容错性. 本次实践依然会用到多文件组织工程的建 ...

  2. 数据结构上机实践第八周项目3-顺序串算法

    顺序串算法 本次实践项目要求如下: 采用顺序存储方式存储串,实现下列算法并测试:  (1)试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符:  void Trans(SqString * ...

  3. 数据结构上机实践第三周项目2 - 建设“顺序表”算法库

    [项目2 - 建设"顺序表"算法库]  领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库.  算法库包括两 ...

  4. 数据结构上机实践第五周项目2 - 建立链栈算法库

    建立链栈算法库 链式存储和顺序存储方式各有特点,各有缺点,上次实践建立了顺序栈的算法库,本次实践将建立链栈的算法库,用以应多更多多样化的问题.(编译环境:VC++6.0) 本次建立算法库需要建立多文件 ...

  5. 数据结构上机实践第八周项目9-广义表算法库及应用

    广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括:  ① 头文glist.h,定义数据类型,声明函数:  ② ...

  6. 数据结构上机实践第八周项目6- 猴子选大王(数组版)

    猴子选大王(数组版) 在之前的项目中,实现了猴子选大王的项目要求,本次实践,将再次实现这个项目,但是运用数组的方法,做到一题多解,集思广益. 项目要求如下:一群猴子,编号是1,2,3 -m,这群猴子( ...

  7. 数据结构上机实践第八周项目5 - 计数的模式匹配

    计数的模式匹配 模式匹配在生活中运用广泛,日常所见的指纹识别,人脸识别......无一不用到模式匹配,为了体现模式匹配的基本思想,本次实践将实现简单的字符串的计数模式匹配. 项目要求如下:采用顺序结构 ...

  8. 数据结构上机实践第八周项目4-字符串加密

    字符串加密 密码在我们的生活中很常见,现在的加密算法最常用的是MD5和SHA512散列式算法,最早的密码加密方式很简单,容易被破译,但是却引领信息安全的潮流,本次实践,将实现最早的字符串加密方式,采用 ...

  9. 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用

    稀疏矩阵的三元组表示的实现及应用 在现代社会中,在一个大量的人群集体中,总会有和某个人有相互之间的关系或者单向关系的,那我们的矩阵也是如此,稀疏矩阵压缩存储的方式,便可以让这种关系一目了然,巧妙应用. ...

最新文章

  1. 系统清理工具(Wise Care 365)绿色版
  2. LINUN 网络连接小记
  3. hibernate h2变mysql_struts2-hibernate-mysql开发案例 -解道Jdon
  4. Xen Documentation - Hypercall Interfaces
  5. C#.NET学习笔记11,12---布尔表达式2组合,if语句
  6. Burpsuite工具使用
  7. 有车的朋友注意了!全语音识别,车载微信终于来了!
  8. 计算机网络数据链路层之其基础概述
  9. Xenu简单使用说明
  10. 暗黑破坏神3 夺魂之镰曝光“威斯特玛”城背景
  11. Kotlin开发第六天,数据存储,持久化
  12. 基本面分析中必须了解的88条避雷常识
  13. App Store上下载和安装Xcode
  14. GPU测试单张图片时间过长
  15. Hadoop的原理是什么
  16. 深入理解Android Crash 流程
  17. Flutter 2.8 正式发布
  18. Python编程写的圣诞树|一共六款|快拿去送给心爱的人吧
  19. 欢迎加入微信交流群交流
  20. 路由之静态路由原理及配置

热门文章

  1. 树的点分治(HDU 5977 2016ICPC大连 G: Garden of Eden)
  2. NYOJ 3:多边形重心问题
  3. python中os.path.basename的使用
  4. python opencv 利用 GrabCut 算法(opencv已经实现)从图像中分离出前景
  5. css伪类选择器,:link、:visited、:focus、:hover、:active、:first-child
  6. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED
  7. 在html中添加class,在HTML标识符的Class中加入Styles
  8. Extjs grid禁用头部点击三角下拉菜单
  9. 有道翻译js解密(1)
  10. iOS之Cocoapods安装