字符串的基本操作(C语言版)

一、实验内容:

  1. 采用顺序结构存储串,编写一个函数substring(strl,str2),用于判定str2是否为strl的子串;
  2. 编写一个函数,实现在两个已知字符串中找出所有非空最长公共子串的长度和最长公共子串的个数;

字符串匹配:

#include <stdio.h>
#include <string.h>
/* 简单模式匹配算法 */
int simple_match( char *t, char *p )
{int n, m, i, j, k;n = strlen( t );m = strlen( p );for( j = 0; j < n - m; j++ ) {  /* 顺序考察从t[j]开始的子串 */for( i = 0; i < m && t[j+i] == p[i]; i++ );/* 从t[j]开始的子串与字符串p比较 */if( i == m )                    /* 匹配成功 */return 0;}return 1;                   /* 匹配失败 */
}void main()
{char *s1[]={ "Abcabc", "Abc123ab", "eeefffg" };char *s2[]={ "aBc", "c123", "fge" };int i;for( i = 0; i < 3; i++ ) {printf( "长字符串[%s] 匹配子串[%s] ", s1[i], s2[i] );if( simple_match( s1[i], s2[i] ) == 0 )printf( "  匹配成功\n" );elseprintf( "匹配失败\n" );}
}

②公共字符串

公共字符串的源代码:
#include <stdio.h>
#include<string.h>
int commstr( char *str1, char *str2, int *lenpt )
{int len1, len2, ln, count, i, k, p;char *st, form[20];if( (len1=strlen(str1)) < (len2=strlen(str2)) ) { /* 使str1的长度不小于str2 */st = str1;str1 = str2;str2 = st;ln = len1;  len1 = len2;len2 = ln;}count = 0;for( ln = len2; ln > 0; ln-- ) {    /* 找长为ln的公共子串 */for( k = 0; k + ln <= len2; k++ ) {/* 自str2[k]开始的长为ln的子串与str1中的子串比较 */for( p = 0; p + ln <= len1; p++ ) {/* str1中的子串自str1[p]开始, 两子串比较通过对应字符逐一比较实现 */for( i = 0; i < ln && str2[k+i]==str1[p+i]; i++ );if( i == ln ) { /* 找到一个最长公共子串 */sprintf( form, "子串%%d[%%%d.%ds]\n", ln, ln );printf( form, ++count, str2+k );}}}if( count )break;}*lenpt = ln;;return count;
}void main()
{int c, len;c = commstr( "Abc1AbcsAbcd123", "123Abc", &len );printf( "共有%d个长为%d的公共子串\n", c, len );
}

二、实验结论:
1.采用顺序结构存储串,编写一个函数substring(strl,str2),用于判定str2是否为strl的子串。
[程序设计思路]设strl=“aoa…am”,str2=“bb…b”,从strl中找与b,匹配的字符 a,若a=b,则判定a+1=b…a+=b,若都相等,则结果是str2是strl的子串,否则继续比较a;之后的字符。
在这里插入图片描述

2.设两个字符串首指针分别为strl和str2,它们的长度分别记为lenl和 len2。不失一般性,设有len1>len2,则它们最长的公共子串长度不会超过len2。程序为找最长的公共子串,考虑找指定长度的所有公共子串的子问题。在指定长度从len2开始逐一递减的寻找过程中,一旦找到了公共子串,程序最先找到的公共字符串就是最长公共子串。输出非空最长公共子串的长度和最长公共子串的个数。
在这里插入图片描述
注意:串是由零个或多个任意字符组成的字符序列。一般记做:s=“a: az… an”;n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一些任务调度的概念杂谈

任务调度 1.什么是调度任务 依赖&#xff1a;依赖管理是整个DAG调度的核心。调度依赖包括依赖策略和依赖区间。 依赖分为任务依赖和作业依赖&#xff0c;任务依赖是DAG任务本身的依赖关系&#xff0c;作业依赖是根据任务依赖每天的作业产生的。两者在数据存储模型上有所不同…

C#可空类型详解:定义、判断值与访问方法

C#中的可空类型&#xff08;Nullable Types&#xff09; 在C#中&#xff0c;值类型&#xff08;如int、float、struct等&#xff09;默认情况下不能表示“无值”或“未知”的状态。为了解决这个问题&#xff0c;C#引入了可空类型&#xff08;Nullable Types&#xff09;&#…

解决 npm xxx was blocked, reason: xx bad guy, steal env and delete files

问题复现 今天一位朋友说&#xff0c;vue2的老项目安装不老依赖&#xff0c;报错内容如下&#xff1a; npm install 451 Unavailable For Legal Reasons - GET https://registry.npmmirror.com/vab-count - [UNAVAILABLE_FOR_LEGAL_REASONS] vab-count was blocked, reas…

o1的风又吹到多模态,直接吹翻了GPT-4o-mini

开源LLaVA-o1&#xff1a;一个设计用于进行自主多阶段推理的新型VLM。与思维链提示不同&#xff0c;LLaVA-o1独立地参与到总结、视觉解释、逻辑推理和结论生成的顺序阶段。 LLaVA-o1超过了一些更大甚至是闭源模型的性能&#xff0c;例如Gemini-1.5-pro、GPT-4o-mini和Llama-3.…

共建智能软件开发联合实验室,怿星科技助力东风柳汽加速智能化技术创新

11月14日&#xff0c;以“奋进70载&#xff0c;智创新纪元”为主题的2024东风柳汽第二届科技周在柳州盛大开幕&#xff0c;吸引了来自全国的汽车行业嘉宾、技术专家齐聚一堂&#xff0c;共襄盛举&#xff0c;一同探寻如何凭借 “新技术、新实力” 这一关键契机&#xff0c;为新…

Django:从入门到精通

一、Django背景 Django是一个由Python编写的高级Web应用框架&#xff0c;以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发&#xff0c;旨在简化Web应用的开发过程。作为一个开放源代码项目&#xff0c;Django迅速吸引了大量的开发…

解决.DS_Store 在项目一致无法排除,.gitignore里也不生效

.DS_Store 是 macOS 操作系统创建的隐藏文件&#xff0c;通常用于存储目录的属性&#xff0c;比如视图设置、图标位置等。它通常不应包含在代码仓库中&#xff0c;因此需要排除它。你提到即使将其添加到 .gitignore 文件中&#xff0c;仍然无法排除它&#xff0c;可能是由于以下…

Qt桌面应用开发 第四天(对话框 界面布局)

目录 1.对话框 1.1模拟对话框 1.2非模拟对话框 1.3消息对话框 1.3.1询问对话框 1.3.2严重错误对话框 1.3.3信息提示对话框 1.3.4警告对话框 1.4其他对话框 1.4.1颜色对话框 1.4.2文件对话框 1.4.3字体对话框 1.5界面布局 1.对话框 1.1模拟对话框 会阻塞同一应用…

一文带你快速初步了解云计算与大数据

目录 &#x1f50d;一、云计算基础 1、云计算的概念、特点、关键技术 2、云计算的分类 3、云计算的部署模式 4、云计算的服务模式&#xff1a;IaaS、PaaS、SaaS分别是什么&#xff0c;具体含义要清楚 5、物联网的概念 6、物联网和云计算、大数据的关系 7、了解云计算的…

PC上浏览器是如何查询DNS 缓存的?

通过 ipconfig /displaydns 的显示结果可以获取本机的 DNS 缓存信息&#xff0c;那么浏览器是如何获取本机的 DNS 缓存。 答案是&#xff1a;浏览器获取本机的 DNS 缓存主要是通过操作系统提供的接口来获取&#xff0c;。 具体的获取途径如下&#xff1a; 先查询自身缓存&am…

【新人系列】Python 入门(十一):控制结构

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

【CVPR2024】2024年CVPR的3D 目标检测的综述(还在补充中)

透视单目DETR 2D 透视单目DETR 2D的。对于DETR系列消除了 NMS的2D目标检测,RT-DETR[8]设计了一个高效的混合编码器,通过解耦尺度内交互和跨尺度融合来提高速度。采用不确定性最小查询选择,为解码器提供高质量的初始查询,从而提高准确率。 透视单目3D 透视单目3D。MonoCD…

VideoCrafter模型部署教程

一、介绍 VideoCrafter是一个功能强大的AI视频编辑和生成工具&#xff0c;它结合了深度学习和机器学习技术&#xff0c;为用户提供了便捷的视频制作和编辑体验。 系统&#xff1a;Ubuntu22.04系统&#xff0c;显卡&#xff1a;4090&#xff0c;显存&#xff1a;24G 二、基础…

Python自动化测试实践中pytest用到的功能dependency和parametrize

Python自动化测试中pytest用到的功能 1、pytest之@pytest.mark.dependency装饰器设置测试用例之间的依赖关系 1.1说明: 1、这是一个pytest第三方插件,主要解决用例之间的依赖关系。如果依赖的上下文测试用例失败后续的用例会被标识为跳过执行,相当于执行了 pytest.mark.s…

Ubuntu Linux使用前准备动作 安装VMware Tools工具

Ubuntu Linux 能够安装开源的 VMware tools 工具&#xff0c;即 Open VM Tools。具体安装步骤如下 1&#xff09;打开终端&#xff1a;可以通过按下 Ctrl Alt T 组合键来打开终端。 2&#xff09;安装 Open-VM-Tools 软件包 在终端中输入以下命令来更新软件包列表并安装 O…

Harmony鸿蒙类似与Android中broadcast广播的api使用及释义

EventHub模块提供了事件中心&#xff0c;提供订阅、取消订阅、触发事件的能力。 这里需要注意&#xff0c;该模块接口仅可在Stage模型下使用。且Api>9 EventHub.on on(event: string, callback: Function): void; 订阅指定事件。&#xff08;接收广播&#xff09; 参…

机器翻译基础与模型 之二: 基于CNN的模型

一、CNN网络 相比于全连接网络&#xff0c;卷积神经网络最大的特点在于具有局部连接&#xff08;Locally Connected&#xff09;和权值共享&#xff08;Weight Sharing&#xff09;的特性。 1.1 卷积核与卷积操作 1.2 步长与填充 1.3 池化 以上关于CNN的基础概念和技术就不…

嵌入式Linux的RTC读写操作应用

嵌入式Linux的RTC读写操作应用 一、前提二、头文件引用三、设置RTC时间四、读取RTC当前时间 一、前提 嵌入式开发中经常有碰到读取和修改时间的需求&#xff0c;所以会经常用到RTC这个功能。首先保证你的开发板上具有RTC这个模块和支持RTC且能正常工作&#xff0c;然后再进行应…

Vue 3集成海康Web插件实现视频监控

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;组件封装篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来组件封装篇专栏内容:Vue 3集成海康Web插件实现视频监控 引言 最近在项目中使用了 Vue 3 结合海康Web插件来实…

最少前缀操作问题--感受不到动态规划,怎么办怎么办

题目&#xff1a; 标签&#xff1a;动态规划&#xff08;应该是双指针的&#xff0c;不理解&#xff09; 小U和小R有两个字符串&#xff0c;分别是S和T&#xff0c;现在小U需要通过对S进行若干次操作&#xff0c;使其变成T的一个前缀。操作可以是修改S的某一个字符&#xff0…