数据结构(c语言)——串

数据结构——串的基本操作(C语言,完整优美实现) 串 文章目录串前言一、串是什么?二、该如何理解串?三、各类串的形式四、串的实现1.串的实现1.1 引入库以及设置结构体1.2初始化串1.3求子串的功能实现1.4两串比较的功能实现1.5定位功能1.6求串的长度功能1.7串的输出功能1.7主函数实现上述全部功能总结 前言 本文就介绍了数据结构中串的基本操作的编程实现,掌握串的建立、遍历,求子串,定位等基本操作 提示:以下是本篇文章正文内容,下面案例可供参考 一、串是什么? 在计算机程序设计中,字符串 string 通常是字符序列,要么是文字常量,要么是 阅读详情

首先是前期准备:定义的常量以及串的结构体;

#include <stdio.h>
#define STRINGMAX 100
typedef struct
{
    char vec[STRINGMAX];
    int len;//储存串的实际数据的长度而不是下标;
        /**(顺便提示一句:往往需要在字符串的末尾加一个结束标志'\0'而这个标志在操作中不算做实际数据,
        除在某些操作中作为循环结束条件,其它都将这个标志看为空的;)**/
}str;//定义一个串结构的结构体;

串链接函数:顾名思义就是将两个串r1和r2首尾相连(r1的尾,r2的首)成一个新串r1,即r1=r1+r2;基本思路是:首先判断r1加r2的长度是否超过了r1的最大长度,然后利用循环(循环的条件是r2的长度)将r2的字符逐个赋值给r1(赋值的位置从r1的尾部开始;)

void Concarstr(str *r1,str *r2)//串链接;
{
    int i;
    printf("\n\t\tr1=%s \t\t  r2=%s",r1->vec,r2->vec);
    if(r1->len+r2->len>STRINGMAX)
    {
        printf("\n\t\t两个串太长,溢出!\n");
    }
    else
    {
        for(i=0;i<r2->len;i++)
        {
            r1->vec[r1->len+i]=r2->vec[i];//将r2的字符逐个赋值到r1的尾部;r1->len储存的不是实际数据而是结束标志'\0';
        }
        r1->vec[r1->len+i]='\0';//在新串的末尾加一个结束标志'\0',(链接时覆盖掉这个数据;)
        r1->len=r1->len+r2->len;
    }
}
求子串:在给定字符串r中从指定位置i开始连续取出j个字符构成子串r1;
基本思路:首先判断取的位置i加上需要取得的字符数j是否大于r的实际长度,即,i-1+j>r->len;(之所以i-1是因为位置和下标是不同的,下标从0开始计数而位置从1开始计数;)注:这句代码代表着允许子串取r->vec[r->len]即结束标志‘0’;如不希望其取‘0’需改为i-1+j>=len;
  
void Substr(str *r,int i,int j)//求子串;
{
    int k;
    str a;//因为下面的指针r1需要一个空间;
    str *r1=&a;

    if(i+j-1>r->len)
    {
        printf("\n\t\t子串超界!\n");
    }
    else
    {
        for(k=0;k<j;k++)
        {
            r1->vec[k] = r->vec[i+k-1];//位置-1即为所需下标;
        }
        r1->len=j;
        r1->vec[r1->len] = '0';
        printf("\n\t\t取出字符为:");
        puts(r1->vec);
    }
}
删除子串:在给定字符串r中删除从指定位置i开始连续的j个字符;
基本思路:首先判断数据是否越界;然后利用双变量循环(一个从所需删除位置开始,一个从所有所需删除的数据位置之后开始)将所需删除的数据覆盖掉;
void Delstr(str *r,int i ,int j)//删除子串;
{
    int k;
    if(i-1+j>=r->len)//r->vec[r->len]储存了字符串的结束标志'0',并不算做实际数据,所以应当把这种情况算作越界;
    {
        printf("要删除的子串超界");
    }
    else
    {
        for(k=i-1-j;k<r->len;k++,i++)//i-1为位置i的坐标表示,k为需删除数据后面的数据;
        {
            r->vec[i-1] = r->vec[k];//用后面的数据覆盖前面需要删除的数据;
        }
        r->len = r->len-j;//设置字符串r的新长度;
        r->vec[r->len] = '0';//无论原串需删除的数据有没有被后面的数据完全覆盖(可能存在后面的数据不足完全覆盖需删除数据的情况);
                            //在新串的r->vec[r->len]赋值结束标志'0',这时无论后面还存不存需删除的数据,都等同于无;
    }
}
插入子串:在字符串r中IDE指定位置i插入子串r1;
基本思路:首先判断插入位置i是否合法再判断串r+串r1是否超过了r的最长长度;然后,利用循环将插入位置后面的数据后移r1->len-1个单位;在利用一个循环将子串插入相应位置;
str Insstr(str *r,str *r1,int i)
{
    int k;

    if(i>=r->len || r->len+r1->len>STRINGMAX)
    {
        printf("\n\t\t不能插入!\n");
    }
    else
    {
        for(k=r->len-1;k>=i-1;i--)
        {
            r->vec[r1->len-1+k] = r->vec[k];//利用循环从串r的最后一个实际元素开始,向后移动r1->len个单位;
        }
        for(k=0;k<r1->len;k++)
        {
            r->vec[i-1+k] = r1->vec[k];//从插入位置开始,利用循环将r1的实际元素逐个赋值给r;
        }
    }
}
模式匹配:即子串定位,设s和t是给定的两个串,在主串s中找到等于子串t的过程称为模式匹配;函数返回t在s中首次出现的储存位置(或序号)
        其中,被匹配的主串s称为目标串,匹配的子串t称为模式;
基本思路;用双重循环完成;外层循环控制主串s,然后拿着外层循环的位置i,内层循环开始于子串t匹配;若匹配成功则返回位置i结束循环,否则继续下一轮的判断;
int Indexstr(str *r,str *r1)
{
    int i,j,k;

    for(i=0;r->vec[i];i++)//主串的结束标志作为循环终止条件;
    {
        for(j=i,k=0;r->vec[j]==r1->vec[k];j++,i++)//将i值交给j用于保护i值,记录位置;把r->vec[j]==r1->vec[k];作为循环条件,若匹配则继续循环,否则退出内层循环;
        {
            if(!r1->vec[k+1])//利用结束标志,判断子串r1的实际数据是否完全与主串r匹配;
            {
                return i;//如果完全与主串匹配,怎返回位置i,结束函数;
            }
        }
    }
    return -1;
}







数据结构 - 串(C语言实现) 一. 串的定义  串是由零个或者多个字符组成的有限序列。串中任意连续的字符组成的子序列称为该串的字串,包含字串的串称为主串。  在C语言中,串可以使用如下语句定义: char str[] = "Hello World!";  上面的串里面一共有12个字符,但是编译器以 ‘\0’ 作为字符串结束标志,所以数组str的长度为13,串str的长度为12。 二. 串的存储结构 定长顺序表示:  串的... 阅读详情

相关推荐

考研复试准备-c语言-数据结构-串-结构体/赋值/求串长/串比较/串连接/求子串/串清空

文章目录一、结构体(两种)二、赋值三、求串长四、串比较五、串连接六、求子串七、串清空 一、结构体(两种) //顺序串的静态分配方式 #define MaxSize 100 typedef struct{ char ch[MaxSize+1];//1用来存放'\0' int length; }Str; //顺序串动态分配方式的结构体定义 typedef struct{ char *ch; int length; }Str; 二、赋值 代码如下(示例): //赋值:将a所指的串中的内容赋值给str

ZhangYFengA的博客 1184

【C语言 数据结构】串

对于由多个字符(≥ 0)组成的字符串(例如),数据结构单独提供了一种存储结构,称为串结构。字符串中的字符之间具有“一对一”的逻辑关系,所以严格意义上讲,串存储结构也属于线性存储结构。和顺序表、链表、栈、队列这些线性存储结构不同的是,串存储结构专门用来存储字符串。数据结构中,根据串中存储字符的数量及特点,对一些特殊的串进行了命名。空串空串指的是未存储任何字符的串,整个串的长度为 0。双引号表示的字符串内没有任何字符,str就是一个空串。空格串。

HR的博客 2934

串 定长顺序存储 数据结构 C语言 严蔚敏

头文件 //定长顺序存储 #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; #define OK 1 #include<stdlib.h> #include<string> #define TRUE 1 #define FALSE 0 #define ERROR 0 #include&l...

qq_42685686的博客 511

C语言数据结构:串!

1、串:即字符串(String)是由零个或多个字符组成的有限序列2、串和线性表的比较。

qq_42319810的博客 1048

【C语言数据结构7】--串的实现

C语言实现串及相关算法。

ZackSock的博客 3586

数据结构---串的基本操作完整代码(C语言)

数据结构之串的基本操作,使用C语言,完整代码,可以使用

c语言数据结构-串

c语言数据结构-串

来自想要赚大钱的小周同学 1276

数据结构C语言串的基本操作

C语言的串的基本操作,内涵创建、增删改查、销毁

使用C语言实现数据结构串

在计算机科学中,字符串(或简称为“串”)是字符序列的一种表示形式。这些字符可以是字母、数字、符号或其他可打印的字符。字符串通常用于文本处理、文件操作、网络通信等许多不同的应用领域。在编程语言中,字符串通常被表示为一种特殊的字符数组。每个字符串都有一个开始字符(第一个字符),一个结束字符(最后一个字符),以及一个指向第一个字符的指针。字符串中的每个字符都有一个特定的位置,从0开始计数。例如,在Python中,字符串可以表示为文本字符串或字节字符串。在Java中,字符串是特殊的类,而不是数组。

Monstres的博客 552

字符串的模式匹配 数据结构 C语言

串的模式匹配即子串定位是一种重要的串运算。设s和t是给定的两个串,在主串s中找到等于子串t的过程称为模式匹配,如果在s中找到等于t的子串,则称匹配成功,函数返回t在s中的首次出现的存储位置(或序号),否则匹配失败,返回-1。t也称为模式。 简单的模式匹配算法思想描述: 首先将s1与t1进行比较,若不同,就将s2与t1进行比较,...,直到s的某一个字符si和t1相同,再将它们之后的字符进行比较,若也相同,则如此继续往下比较,当s的某一个字符si与t的字符tj不同时,则s返回到本趟开始字符的下一个字符,即si-j+2,t返回到t1,继续开始下一趟的比较,重复上述过程。若t中的字符全部比完,则说明本趟匹配成功,本趟的起始位置是i-j+1或i-t[0],否则,匹配失败。

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9949

数据结构串 堆串基本操作C语言实现

【数据结构】串 堆串的基本操作 以一组地址连续的存储单元存放串值字符序列,存储空间在程序执行过程中动态分配得到,操作灵活。 代码: 1.结构体定义 typedef struct { char * ch; //若是非空串,则按串长分配存储区,否则ch为NULL int length; //串长度 }HString; 2.基本操作函数声明 // 基本操作的函数原型说明 //初始化生成一个空...

欢乐佛的博客 8437

避坑指南:雅特力AT32F403A在Keil5中的V2库配置常见问题解析

本文详细解析了国产MCU雅特力AT32F403A在Keil5中配置V2库的常见问题,包括工程创建、库文件配置、编译错误和外设设置等关键环节。针对项目文件夹结构混乱、芯片型号选择错误、头文件路径设置不当等典型问题提供实用解决方案,帮助开发者高效避坑,提升开发效率。

weixin_30335575的博客 375

数据结构 习题 第四章 串 (C语言描述)

最近在复习数据结构,所以想把平时上课做的习题做个总结,如果大家有遇到这方面的问题就可以参考一下了,废话不多说,直接开始吧。 1、单选题 S1=“ABCD”,S2=“CD”则S2在S1中的位置是(D ) A.1 B.4 C.2 D.3 2、填空题 c语言有专门的字符串处理函数。 比如比较两个串的大小可以用函数▁▁▁, 连接两个字符串可以用函数▁▁▁, 字符串的赋值操作可以用函数▁▁▁, 求字符串的长度用函数▁▁▁ 使用这些函数时都要加上#include <▁▁▁> (本题中只要写出函数名就可以了。

TXYGoodluck的博客 9759

TongWeb微服务部署实战:Nacos注册与网关路由的疑难解析

本文分享了将Spring Cloud微服务迁移至TongWeb应用服务器时,解决Nacos服务注册失败与Spring Cloud Gateway路由失效的实战经验。针对Nacos注册问题,通过实现ApplicationRunner接口并利用JMX获取容器端口,实现了手动注册;针对网关路由问题,建议将基于WebFlux的Gateway模块改为JAR包独立部署,以保障其原生运行环境。文章为在TongWeb上进行微服务部署提供了关键的问题排查思路与混合架构部署的最佳实践。

weixin_29209801的博客 240

AI提示词实战:用EARS语法5步搞定产品需求拆解(附完整案例)

本文详细介绍了如何运用EARS语法将模糊的产品需求进行原子化拆解,转化为清晰、可执行的结构化指令。通过一个完整的自由职业者项目管理工具案例,演示了从原始需求分析到构建增强AI提示词的五步实战流程,帮助产品经理和技术人员实现高效、精准的需求传达与协作。

nokia的博客 1031

数据结构实验报告,串的练习(C语言)

数据结构实验报告,串的练习(C语言)

VLOKL的博客 1391

日志异常检测详细整理,看这一篇就够了(附各项目代码链接)

对于不用的日志键,用它们的参数值向量训练一个参数值异常检测模型来检测有这些参数值反映的系统性能异常。与标准的GAN框架一样,D和G的参数是基于D的输出来更新的,因此鉴别器D可以被训练为尽可能敏感地将正确的标签分配给真实和虚假序列,而生成器将被训练为尽可能聪明地在经过足够多轮的迭代后欺骗鉴别器,即误导D将真实标签分配给虚假序列。LR:逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。

qq_20368489的博客 1万+

C语言数据结构——串

串的定义: 串是由零个或多个字符串组成的有限序列,又叫字符串。 串的长度: (1<=i<=n)可以是字母、数字或其他字符;串中字符的数目n称为串的长度。零个字符的串称为空串,他的长度为0。 串可以是空串,即没有字符,直接由" "表示(注意里面没有空格哦!)。 例如: a=‘BEI’ b=‘JING’ c=‘BEIJING’ d=‘BEI JING’ 则a,b,c,d 它们的长度分别为3,4,7,8;并且a和b都是c和d的子串,a在c和d中的位置都是1,而b在C中的位置是4,在d中的位置则是5.

我想让你也是一个开心果! 863

【2026年华为暑期实习(非AI方向(通软&嵌软&测试&算法&数据科学))-4月8日-第一题- 包裹的编码】(题目+思路+Java&C++&Python解析+在线测试)

摘要:该问题要求将给定的十进制整数N转换为混合进制编码字符串,并处理回文检测。首先根据N的符号位确定编码首位(0或1),然后按输入的进制序列依次对N的绝对值进行取余和整除操作,得到编码数组。将数组元素转换为字母后生成字符串,若字符串为回文则添加"(palindrome)"后缀;否则输出最长回文子串(字典序最小)。算法采用中心扩展法检测回文,时间复杂度为O(L²),空间复杂度为O(L),其中L为字符串长度。

m0_73659489的博客 129

uniapp - 最新实现hbuilder项目运行到ios基座或苹果ios真机设备详细教程,如何在ios苹果手机上真机运行测试,IOS自定义基座在线打包调试(uniapp项目如何在苹果手机上运行调试)

uni-app,苹果,app,ios,设备,自定义基座,运行app到苹果手机,mac电脑,Xcode,hbuilderX,运行ios基座调试Uniapp,无需打包,苹果证书,ipa,运行失败,报错,无法启动,连接失败,出错,详细教程,如何解决这个问题,怎么办,申请iOS证书,运行项目到iOS基座,打包ios自定义基座,在iOS真机上运行,新手小白,超级详细的教程,dcloud如何苹果ios系统真机测试,调试基座失败,真机调试ios app,App基座安装后无法打开问题,真机运行时检测不到手机的问题或者基座安

✅ 精选推荐文章 1万+

数据结构 - C语言版 - 串 所有基本操作

题目:要求输入两个字符串,实现字符串的连接,以及判断这两个串是否相等; #include #include #define MAXSIZE 255 typedef struct String{ int data[MAXSIZE]; int next; }String; String * Init_String(String * S) { S = (String *) mallo

W_Jp - 编程爱好者 2573

从零开始学习PX4源码0(固件下载及编译)

本节主要记录从零开始学习PX4源码1(固件下载)的过程,欢迎批评指正!!!下载固件主要分为两个版本,之前稳定版本和最新官网发布版本,为什么要下载两个版本,主要是说明两个版本有一定的差异(开发环境及源码文件格式等),我们是从之前版本开始学习,为什么不从最新的?因为之前版本代码文件格式还是固定的,最新的变化很大,不利于初学者学习,apm和px4不好的地方就是之前版本v1.7.2和最新版本v1.14.0有些文件总是在变化,这样很不好。

陌城烟雨 4616

数据结构——串的基本操作(C语言,究极简单,完整实现)

串 文章目录串前言一、串是什么?二、该如何理解串?三、各类串的形式四、串的实现1.串的实现1.1 引入库以及设置结构体1.2初始化串1.3求子串的功能实现1.4两串比较的功能实现1.5定位功能1.6求串的长度功能1.7串的输出功能1.8判断串的是否为空功能1.8主函数实现上述全部功能总结 前言 本文就介绍了数据结构中串的基本操作的编程实现,掌握串的建立、遍历,求子串,定位等基本操作 提示:以下是本篇文章正文内容,下面案例可供参考 有更简洁的代码实现,请移步 一、串是什么? 在计算机程序设计中,字符串

明宇逸风的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c语言 数据结构 串的顺序存储 学习记录

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define MaxSize 100 typedef struct { char data[MaxSize]; int length; } SqString; //串赋...

weixin_41639688的博客 313

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言数据结构第四章—— 三种方式实现的串

数组链表字符串,函数大杂烩,写死我啦!

绿豆汤的博客 450

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

下一篇: ssm错误汇总:Error creating bean with name 'sqlSessionFactory' defined in class path resource
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值