数据结构之顺序串的基本操作——C语言

2023-11-05

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100

typedef struct
{
	char data[MaxSize];
    int len;
}SqString;

void StrAssign(SqString &str,char cstr[])  
{
	int i;
    for (i=0;cstr[i]!='\0';i++)
		str.data[i]=cstr[i];
    str.len=i;
}

void StrCopy(SqString &s,SqString t)  /*引用型参数*/
{    
	int i;
    for (i=0;i<t.len;i++)
		s.data[i]=t.data[i];
    s.len=t.len;
}

int StrEqual(SqString s,SqString t)
{
	int same=1,i;
    if (s.len!=t.len) 
		same=0; /*长度不相等时返回0*/
    else 
        for (i=0;i<s.len;i++)
     		if (s.data[i]!=t.data[i]) /*有一个对应字符不同时返回0*/
            {    	
				same=0;  
				break; 
			}
    return same;
} 

int StrLength(SqString s)
{
    return s.len;
}

SqString Concat(SqString s,SqString t)
{     
	SqString str;  
	int i;
    str.len=s.len+t.len;
    for (i=0;i<s.len;i++) /*s.data[0..s.len-1]=>str*/
		str.data[i]=s.data[i]; 
    for (i=0;i<t.len;i++)  /*t.data[0..t.len-1]=>str*/
        str.data[s.len+i]=t.data[i];
    return str;
}


SqString SubStr(SqString s,int i,int j)
{   
	SqString str;
	int k;
	str.len=0;
    if(i<=0 || i>s.len || j<0 || i+j-1>s.len)
	{      
		printf("参数不正确\n");
        return str;    /*参数不正确时返回空串*/
	}
    for(k=i-1;k<i+j-1;k++)     /*s.data[i..i+j]=>str*/
        str.data[k-i+1]=s.data[k];
    str.len=j;
    return str;
}

SqString InsStr(SqString s1,int i,SqString s2)
{    	
	int j;	
	SqString str;  
	str.len=0;
    if (i<=0 || i>s1.len+1)  /*参数不正确时返回空串*/
	{      
		printf("参数不正确\n");
        return s1;
	}
	for (j=0;j<i-1;j++)        /*s1.data[0..i-2]=>str*/
        str.data[j]=s1.data[j];
    for (j=0;j<s2.len;j++)  /*s2.data[0..s2.len-1]=>str*/
        str.data[i+j-1]=s2.data[j];
    for (j=i-1;j<s1.len;j++)  /*s1.data[i-1..s1.len-1]=>str*/
        str.data[s2.len+j]=s1.data[j];
    str.len=s1.len+s2.len;
    return str;
}


SqString DelStr(SqString s,int i,int j)
{    
	int k;
	SqString str;
    str.len=0;
    if (i<=0 || i>s.len || i+j>s.len+1)  /*参数不正确时返回空串*/
	{      
		printf("参数不正确\n");
        return str;
	}
    for (k=0;k<i-1;k++)           /*s.data[0..i-2]=>str*/
        str.data[k]=s.data[k];
    for (k=i+j-1;k<s.len;k++) /*s.data[i+j-1..s.len-1]=>str*/
        str.data[k-j]=s.data[k];
    str.len=s.len-j;
    return str;
}

SqString RepStr(SqString s,int i,int j,SqString t)
{    	
	int k;
	SqString str;
    str.len=0;
    if (i<=0 || i>s.len || i+j-1>s.len)   /*参数不正确时返回空串*/
	{      
		printf("参数不正确\n");
        return str;
	}
	for (k=0;k<i-1;k++)	       /*s.data[0.i-2]=>str*/
        str.data[k]=s.data[k];
    for (k=0;k<t.len;k++)      /*t.data[0..t.len-1]=>str*/
        str.data[i+k-1]=t.data[k];
    for (k=i+j-1;k<s.len;k++) /*s.data[i+j-1..s.len-1]=>str*/
        str.data[t.len+k-j]=s.data[k];
    str.len=s.len-j+t.len;
    return str;
}

void DispStr(SqString s)
{     
	int i;
    if (s.len>0)
    {     
		for (i=0;i<s.len;i++)
			printf("%c",s.data[i]);
        printf("\n");
    }
}

int main()
{
	SqString s,s1,s2,s3,s4;

	printf("建立串S和S1\n");
	StrAssign(s,"abcdefghijklmn");
	StrAssign(s1,"xyz");

	printf("输出串S\n");
	DispStr(s);

	printf("输出串S的长度\n");
	printf("%d\n",StrLength(s));

	printf("在串S的第9个字符位置插入串S1而生成串S2");
	s2 = InsStr(s,9,s1);

	printf("输出串S2\n");
	DispStr(s2);

	printf("删除串S的第2个字符开始的5个字符而生成串S2\n");
	s2 = DelStr(s,2,5);

	printf("输出串S2\n");
	DispStr(s2);

	printf("将串S的第2个字符开始的5个字符替换成串S1而生成串S2\n");
	s2 = RepStr(s,2,5,s1);

	printf("输出串S2\n");
	DispStr(s2);

	printf("提取串S的第2个字符开始的10个字符而生成串S3\n");
	s3 = SubStr(s,2,10);

	printf("输出串S3\n");
	DispStr(s3);

	printf("将串S1和S2连接起来而生成串S4\n");
	s4 = Concat(s1,s2);

	printf("输出串S4\n");
	DispStr(s4);
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构之顺序串的基本操作——C语言 的相关文章

  • 【傅里叶级数与傅里叶变换】数学推导——1、基础知识点回顾及[Part1:三角函数的正交性]介绍

    文章内容来自DR CAN关于傅里叶变换的视频 本篇文章提供了一些基础知识点 比如三角函数常用的导数 三角函数换算公式等 文章全部链接 基础知识点 Part1 三角函数系的正交性 Part2 T 2 的周期函数的傅里叶级数展开 Part3 周
  • 42-Golang中的单元测试

    Golang中的单元测试 需求 传统方法 基本介绍 单元测试快速入门总结 综合案例 需求 在工作中 我们会遇到这样的情况 就是去确认一个函数 或者一个模块的结果是否正确 传统方法 在main函数中 调用addUpper函数 看看实际输出的记
  • 内网能ping通telnet 通,不能访问解决

    内网能PING通TELNET通不能访问解决 遇到一个离奇故障 内网 两个主机在同一IP段内 能互相PING通 TELNET对方的WEB服务器端口 通 但用IE访问时不能 显示HTTP400 这明显是客户端系统的问题啊 但如何解决呢 我强烈怀
  • LeetCode 1233. 删除子文件夹(C++)

    思路 1 首先能想到这种判断字符串前缀的题目可以使用前缀树 2 对字符串字典序排序 那么就能满足 一个子文件夹的左边要么是同父文件夹的子文件夹 要么就是他的父文件夹 同时 第一个文件夹一定是父文件夹 那么就可以建立一个父文件夹地址 每次便利
  • vs2019 中文离线安装包下载,类似ISO,不用联网安装vs2019企业版

    vs2019 中文离线安装包下载 类似ISO 不用联网安装vs2019企业版 前言 我们现在微软官方网站下载的安装包一般也就1 2兆 运行这个小安装包的程序时 才真正在网站上下载vs2019 目前的vs2019企业版 专业版 社区版都要20
  • FISCO BCOS 2.9.1 从0部署到简单使用的CRUD接口

    FISCO BCOS 2 9 1 从0部署到简单使用CRUD接口 文章目录 FISCO BCOS 2 9 1 从0部署到简单使用CRUD接口 前言 1 部署fisoc bcos 2 9 1环境 1 1 安装centos依赖 1 2 创建fi
  • Hibernate+spring缓存机制配置

    在applicationContext xml文件中添加以下代码

随机推荐

  • 关于Tp中图片路径的问题

    图片一般放在Public 目录下 在模板文件中引用图片时 src PUBLIC 图片Public 下面的路径 注意在linux下面要区分大小写 windows是不用区分也能识别的 部署服务器上后要严格区分大小写
  • vue之websocket聊天功能实现

    一 首先配置全局websocket 创建webSocket js global js export default ws setWs function newWs this ws newWs main js引入 import webSock
  • iPhone手机使用:微信提示“运行内存不足导致该小程序无法使用“解决方法

    突然发现遇到的一个很诡异的情况 通过分析 解决了 分享一下 如图所示 通过iPhone XR打开微信小程序的时候 微信突然提示 运行内存不足导致该小程序无法使用 然后点击 确定 按钮之后 就关闭了 而且查看手机内存128G的还剩下70G没有
  • org.apache.hive.com.esotericsoftware.kryo.kryoexception: encountered unregistered class id 错误解决办法

    执行hive 任务的时候 有些任务会报下列错误 hive 0 14 版本才会有这个问题 任务重做之后可能又会成功 1 错误信息 hdfs nameservice1 tmp hive dbs 9c29873a 664f 45a4 87f5 a
  • 语音合成方法的主要分类

    语音合成的研究已有多年的历史 现在研究出的语音合成方法的分类 从技术方式讲 可分为波形合成法 参数合成法 和规则合成方法 从合成策略上讲可分为频谱逼近和波形逼近 1 波形合成法 波形合成法一般有两种形式 一种是波形编码合成 它类似于语音编码
  • Redis 6.0 新功能

    1 支持 ACL 1 1 ACL 简介 官网 https redis io topics acl Redis ACL 是访问控制列表 Access Control List 的缩写 该功能允许根据可以执行的命令和可以访问的键来限制某些连接
  • String包含的方法

    public class TestString public static void main String args String s1 new String abc String s2 abc String s3 ABC String
  • 2021-05-28

    什么是散列表 散列表 散列表 Hash table 也叫哈希表 是根据键 Key 而直接访问在内存存储位置的数据结构 也就是说 它通过计算一个关于键值的函数 将所需查询的数据映射到表中一个位置来访问记录 这加快了查找速度 这个映射函数称做散
  • 使用Qt编写模块化插件式应用程序

    动态链接库技术使软件工程师们兽血沸腾 它使得应用系统 程序 可以以二进制模块的形式灵活地组建起来 比起源码级别的模块化 二进制级别的模块划分使得各模块更加独立 各模块可以分别编译和链接 模块的升级不会引起其它模块和主程序的重新编译 这点对于
  • RabbitMQ--基础--10.2--死信队列

    RabbitMQ 基础 10 2 死信队列 1 死信队列 DLX queue 当消息在一个队列中变成死信之后 它能重新被发送到另一个交换机中 这个交换机就是 死信交换机 绑定 死信交换机 DLX Exchange 的队列就称之为死信队列 死
  • 语句执行顺序对判断语句条件的影响

    对比相同的输出结果下 不同的语句执行顺序对判断语句条件的影响 public class Homework1 public static void main String args 输出1 100偶数 每5个一行 一行中的每个数字之间使用逗号
  • 【深度学习】Loss Functions for Neural Networks for Image Processing

    在目前的深度学习中 业界主流主要还是把调整深度学习网络结构作为主要的工作重心 即使损失函数 loss functions 对整个网络的训练起着十分重要的作用 Nvidia和MIT最近发了一篇论文 loss functions for neu
  • 探索Java8——四大函数

    文章目录 Function接口 源码解析 Consumer 接口 Supplier 接口 Predicate 接口 其他的接口 函数接口 你可以理解为对一段行为的抽象 简单点说可以在方法就是将一段行为作为参数进行传递 这个行为呢 可以是一段
  • stm32制作bootloader时遇到的问题

    遇到的问题和解决方法 待验证 1 在下载的例程中做实验时有时出现BootLoader无法进入到应用程序中 将跳转函数前的延时加长至下图 暂时未出现问题 待验证 此处的0x2ffe0000需根据自身的ram空间修改 此处相当于0x1ffff
  • 动态规划算法的基本思想-求解步骤-基本要素和一些经典的动态规划问题【干货】

    文章目录 1 序 2 动态规划的基本概念 1 3 动态规划算法的基本思想 2 4 动态规划的求解步骤 2 5 动态规划算法的基本要素 2 5 1 最优子结构 5 2 重叠子问题 6 一些经典的动态规划问题 1 序 近期笔者会写一些博客 与大
  • 前端——Access to XMLHttp Request at...from origin has been blocked by policy

    前言 小编最近在做前端功能的时候碰到了这么一个错误 错误描述为 Access to XMLHttp Request at from origin has been blocked by policy 说实话 这个错误并没有怎么见过 甚至可以
  • 各种数据库连接字符串(EFCore)

    qlite Data Source Furion db MySql Data Source localhost Database Furion User ID root Password 000000 pooling true port 3
  • convertdate

    sample date 2015 09 10 00 00 00 2015 09 09 00 00 00 000 expect iso date add time zone 2015 09 10T00 00 00 0800 function
  • linux 如何支持2T以上的硬盘

    一 MBR 和 GPT 区别 1 1 MBR MBR分区表 即主引导记录 大家都很熟悉 是过去我们使用windows时常用的 所支持的最大卷 2T 而且对分区有限制 最多4个主分区或3个主分区加一个扩展分区 1 2 GPT GPT 即GUI
  • 数据结构之顺序串的基本操作——C语言

    include