我采用了多文件系统的方式将算法库分为三个部分,包括头文件、源文件以及测试函数。

头文件 :

/*Copyright (c) 2015,烟台大学计算机与控制工程学院All righs reserved文件名称:sqstring.h作者: 李哲完成日期:2015年10月19日问题描述:建设顺序串算法库程序说明:头文件*/#ifndef SQSTRING_H_INCLUDED
#define SQSTRING_H_INCLUDED#define MaxSize 100
typedef struct
{char data[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

源文件:

/*Copyright (c) 2015,烟台大学计算机与控制工程学院All righs reserved文件名称:sqstring.c作者: 李哲完成日期:2015年10月19日问题描述:建设顺序串算法库程序说明:源文件*/#include "sqstring.h"
#include <stdio.h>void StrAssign(SqString &s,char cstr[])    //字符串常量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)   //串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)             //长度不相等时返回错误same=false;elsefor (i=0;i<s.length;i++)if (s.data[i]!=t.data[i])   //有一个对应字符不相同时返回错误{   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");}}

测试函数:

/*Copyright (c) 2015,烟台大学计算机与控制工程学院All righs reserved文件名称:sqstring.h作者: 李哲完成日期:2015年10月19日问题描述:建设顺序串算法库程序说明:测试函数*/
#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,3);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. 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目2 -建设"顺序表算法库" *作 者:邵雪源 ...

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

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

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

    项目2 - 建设"单链表"算法库 本次实践的目的以多文件组织的形式建设"单链表算法库",以便在后续的工程中使用. 文中的多文件组织方式不再细说,可以点击此处参照 ...

  4. 数据结构上机实践第四周项目4 - 建设双链表算法库

    数据结构之自建算法库--双链表 各种算法结构都有各自的用途,在实际中我们会碰到各种工程,单链表有时无法或者不能很好的满足我们的需求,这个时候,双链表不失为一种好的数据结构.本次实践将建立双链表算法库, ...

  5. 第5周实践项目2 链栈的算法库建立

    listack.h#ifndef LISTACK_H_INCLUDED #define LISTACK_H_INCLUDEDtypedef char ElemType; typedef struct ...

  6. [数据结构实践项目]变态的停车场管理系统

    [数据结构实践项目]变态的停车场管理系统 项目简介 设停车场是一个可以停放 n 辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在 ...

  7. 第四周项目2--建立”单链表“算法库

    /*烟台大学计算机与控制工程学院 作 者:孙潇 完成日期:2015年10月5号 问题描述:按照"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库. 这一周,建的是 ...

  8. 数据结构 实践项目——数据结构、算法、程序设计

    [项目1 - C/C++语言中函数参数传递的三种方式] C语言提供了两种函数参数传递的方式:传值和传地址.在C++中,又拓展了引用方式.通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准 ...

  9. 数据结构实践项目——图的基本运算及遍历操作

    本文是针对[数据结构基础系列(7):图]中第1-9课时的实践项目. 0701 图结构导学 0702 图的定义 0703 图的基本术语 0704 图的邻接矩阵存储结构及算法 0705 图的邻接表存储结构 ...

  10. 第十六周上机实践—项目2—大数据集上排序算法性能的体验

    /* *Copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年12月18日 *版本:v1 ...

最新文章

  1. 面试官问:Kafka 会不会丢消息?怎么处理的?
  2. Yii2掉index.php?r=
  3. 探索JAVA并发 - 悲观锁和乐观锁
  4. php人气代码,php – 人气算法
  5. 入门学习webpack笔记
  6. 【C++】21.函数传参 传指针和传引用的区别
  7. protobuf入门教程(一):简介和安装
  8. openwrt上wifi探针的实现
  9. jzoj1764-游戏【dp,dfs】
  10. MySQL把多条数据给汇总成一条数据
  11. Java基础知识之方法的返回值与重载
  12. PacMan开发-碰撞检测实现
  13. android bin目录是什么,android bin目录下的.ap_是神马文件?
  14. codeforces 369C Valera and Elections
  15. 重走JAVA之路(四):ThreadLocal源码解析
  16. Javaweb重要知识点总结(六)常见的前端框架
  17. MEGARAC(宝德)服务器BMC登录失败解决办法
  18. 开源webrtc服务器对比
  19. 数学建模常用算法案例k—means聚类分析
  20. 对OMAP-L138的PSC模块的理解

热门文章

  1. 灾难恢复! 关于做过快照的AVHD文件合并成VHD .
  2. scala中的协变和逆变
  3. 如何通过U盘等外部设备启动带有T2芯片的Mac?
  4. 三款新旧 MacBook Pro 怎么选?
  5. Photoshop 入门教程「4」如何使用撤消命令?
  6. EasyDataTransform for mac (表格数据转换)
  7. Mac优化工具多合一MacCleaner PRO
  8. 矢量绘图软件Sketch 82 for mac
  9. 如何将Blocs v2项目迁移到Blocs v3?
  10. 使用Screaming Frog SEO Spider 如何查找断开的链接