编程练习2:字符串匹配问题

【数据结构】 字符串模式匹配 模式匹配目前有两种方法: BF算法和KMP算法 BF算法 思路: 从目标串的第一个字符和模式串的第一个字符开始,依次比较每个字符,如果相同指针同步后移比较后续字符,如果不同i指针后移一个,j指针回到第一个字符重新匹配,若匹配成功就返回模式串t中第一个字符在目标串中的位置,失败返回0 代码: int index(Sqstring s,Sqstring t){ int i=j=1; //下标从1开始 while(i<=s.length&&j<=t... 阅读详情

题目:括号配对问题

现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)” 四种字符。

思路:
(1) 利用栈来完成这个操作,在C++中有已经封存好的栈,引用的方式为:
引入一个头文件:#include
申请一个栈:std::stack<类型> z;
栈的相关操作有:(此处指可以直接调用的函数名称)
empty():栈是否为空的函数,若栈为空则返回一个true
pop():删除栈顶元素
top():得到栈顶元素
push();压栈
size():返回栈中元素的数量
(2)字符串匹配的思路:
遇到左括号压栈,右括号弹栈,判断弹栈的元素是否与现有的进行匹配,若匹配则删除栈顶元素,不匹配证明现有已经输入的是不匹配的。
最终,在完成对所有的输入进行处理的时候,判断栈是否为空,若栈为空则证明所有的元素都已经弹栈完毕,若不为空说明输入的为奇数,不可能进行完整的匹配。
(3)字符串的处理方式:
在C++中,对字符串进行输入的一种方式,利用char型数组完成功能。
char a[100];
cin>>a;
这样的字符串输入以空格为终止符

本题的主要代码为:

本代码需要注意一个地方,子函数必须写在main函数的前面,否则在进行编译的时候,main函数找不到子函数会发生报错

#include <iostream>
#include <stack>//使用现有库里的封装栈
using namespace std;
bool panduan(char a[])
{
//cout << “进入判断函数” << endl;
std::stack z;//申请一个栈进行判断

//cout << “输出字符串的长度”<<strlen(a) << endl;
for (int i = 0; i < strlen(a); i++) //小于字符串的长度
{
switch (a[i])
{
case ‘(’:
//cout << “判断为(” << endl;
z.push(a[i]); break;
case ‘[’:
//cout << “判断为[” << endl;
z.push(a[i]); break;
case ‘)’:
if (z.top() != ‘(’)//不匹配
return false;
else //匹配,弹栈
{
z.pop(); break;
}
case’]’:
if (z.top() != ‘[’)
return false;
else
{
z.pop();
// cout << “移除” << endl; break;
}
default:
break;
}
}
if ( !z.empty())
{
// cout << “栈不为空” << endl;
}
return z.empty();//若经过弹栈以后占为空,则证明已经完全匹配没有剩余
}
int main(void)
{
int n;//输入n,表示组数
cin >> n;
bool b[5];
for (int j = 0; j < 5; j++) //用于存放结果
{
b[j] = false;
} for (int i = 0; i < n; i++)
{
char a[1000];
cin >> a;
b[i] = panduan(a);
} for (int k = 0; k < n; k++)
{
if (b[k])
cout << “YES” << endl;
else
cout << “NO” << endl;
}
//system(“PAUSE”);
return 0;
}

educoder数据结构 字符串匹配 第2关:实现KMP字符串匹配 任务描述 本关的编程任务是补全 step2/kmp.cpp 文件中的KmpGenNext函数,以实现 KMP 字符串匹配。该函数生成给定字符串的next数组。 相关知识 第 1 关中实现的朴素的字符串匹配算法在实际应用系统中效率低,而 KMP 字符串匹配算法可以实现高效的匹配。 假设长字符串为t,短字符串为p。为了进行 KMP 匹配,首先需要计算字符串p的next数组,后面实现了计算该数组的函数void KmpGenNext(char* p, int* next)。对于 “abcabcab” ,计算 阅读详情

相关推荐

第1关:实现朴素的字符串匹配 and 第2关:实现KMP字符串匹配

样例输入: string tri 样例输出: Location: 1 int FindSubStr(char* t, char* p) /* 从字符串t查找子字符串p。 字符串以数值结尾,例如p="str",那么p[0]='s',p[1]='t',p[2]='r',p[3]=0。 采用朴素的匹配算法。 返回子字符串第一次出现的位置,例如t="string ring",p="ring",则返回2。 若没有找到,则返回-1。 */ { // 请在此添加代码,补全函数FindSubStr /*

weixin_51994374的博客 5002

PTA指针 地球时间 - 《C++编程基础及应用》- 习题6-2

地球时间)以第3章微实践-地球时间的代码为基础,实现下述getTime()函数,将当前小时、分钟和秒数写入指针h、m和s指向的整数对象。 函数接口定义: void getTime(int* h, int* m, int* s); 以下是第3章微实践-地球时间的源代码: //Project - EarthTime #include <stdio.h> #include <time.h> int main() { time_t t; time(&t); //获取当前时间,从1970年1月1

C19334的博客 266

蛮力法:设计算法求解字符串的模式匹配问题,并编程实现。

蛮力法:设计算法求解字符串的模式匹配问题,并编程实现。

syklar&miracle 2922

c++算法题之的字符串模式匹配

c++算法题之的字符串模式匹配

weixin_54570755的博客 553

java 字符串匹配abba_字符串匹配模式问题

题目大意:有一个字符串它的构成是词 + 空格的组合,如“北京 杭州 杭州 北京”,要求输入一个匹配模式(简单的以字符来写), 比如 aabb, 来判断该字符串是否符合该模式。例子:pattern = "abba", str="北京 杭州 杭州 北京" 返回 turepattern = "aabb", str="北京 杭州 杭州 北京" 返回 falsepattern = "abc", str="北...

weixin_42523720的博客 1480

字符串匹配算法

字符串匹配这样一个功能,我想对于任何一个开发工程师来说,应该都不会陌生。我们用的最多的就是编程语言提供的字符串查找函数,比如 Java 中的 indexOf(),Python 中的 find() 函数等,它们底层就是依赖接下来要讲的字符串匹配算法。 1.BF算法 BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。从名字可以看出,这种算法的字符串匹配方式很“暴力”,当然也就会比较简单、好懂,但相应的性能也不高。 在开始讲解这个算法之前,我先定义两个概念,方便我后

编程使我快乐 1714

C++常用算法及数据结构(字符串匹配算法)

然后,在文本串中滑动窗口,比较窗口的哈希值与模式串的哈希值是否相等,以及窗口内的字符串与模式串是否相等。它的时间复杂度为O(n+m+k),其中n为文本串长度,m为模式串平均长度,k为模式串数量。KMP算法利用模式串的特性,通过建立一个部分匹配表(Partial Match Table)来避免在模式串和文本串中的不必要的匹配和回溯。它的时间复杂度为O(n+m),其中n为文本串长度,m为模式串长度。字符串匹配算法是指在一个文本串(较长的字符串)中查找一个模式串(较短的字符串)的出现位置或匹配情况的算法。

Ljq0704的博客 3145

educoder数据结构 字符串匹配 第1关:实现朴素的字符串匹配

任务描述 本关任务是实现函数int FindSubStr(char* t, char* p)。 相关知识 在一个长字符串中寻找一个短字符串出现的位置,这是字符串匹配问题。 例如:长字符串是 “string” ,短字符串是 “ring” ,那么短字符串在长字符串中出现的位置是 2 ,即 “ring” 在 “string” 中出现的开始位置是 2 。 编程要求 本关的编程任务是补全 step1/mystr.cpp 文件中的FindSubStr函数,以实现朴素的字符串匹配。 具体请参见后续测试样

qq_54008392的博客 5852

字符串匹配-KMP算法

题目要求:给你两个字符串T,P。查找T串中是否存在P串。一般思路:从T的第一个元素开始遍历,不断匹配P中的元素,如果当前位置元素匹配失败了,就重新从P的第一个元素开始匹配。#include &lt;stdio.h&gt; #include&lt;string.h&gt; char P[105],T[105]; int main() { scanf("%s%s",T,P); int ...

哇-WA 的博客 828

1203:扩号匹配问题

1203:扩号匹配问题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"...

lybc2019的博客 3491

数据结构:字符串存储操作:KMP模式匹配算法

主要讲述字符串模式匹配的KMP算法的基本思想,算法过程。没有进一步细化和改进。

GEEK编程练习— —字符串匹配

题目给定字符串P和T,要求从T中找出与P相同的所有子串,并返回子串位置。输入str strsstrstrl输出1 5 8分析这其实是字符串模式匹配的问题。简单科普一下,模式匹配又可分为单模式匹配和多模式匹配,单模式匹配,即只有一个模式串;多模式匹配,即有k个模式串。常见的单模式匹配的算法有BF算法、KMP算法、BM算法等等。常见的多模式匹配算法有Trie树,AC自动机,WM算法, 后缀树等等。这里给

Sin_Geek成长の迹 2795

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1021

Python 字符串编程练习题

输入一个字符串,判断其是否是回文字符串。

Fyy20021007的博客 644

GPU架构-SIMT

本文深度剖析了GPU的SIMT架构,从硬件实现层面解析其与SIMD的本质差异。SIMT通过将32个线程捆绑为warp执行,在标量编程模型下实现数据并行。文章对比了SIMD和SIMT的执行模型、分支处理机制及存储层次,指出SIMT是对SIMD的虚拟化抽象。重点分析了Volta架构引入的独立线程调度技术,以及访存合并对性能的关键影响。通过定量数据展示了各代GPU架构的寄存器文件规模和线程调度机制,为开发者优化GPU程序提供了硬件层面的理论基础。

技术引领业务创新 973

从零开始:用7353张VOC/YOLO格式混凝土缺陷数据集训练你的第一个检测模型

本文详细介绍了如何使用7353张VOC/YOLO格式的混凝土缺陷数据集训练首个目标检测模型。从环境配置、数据解析到YOLOv5模型训练与优化,提供了完整的实战指南,特别针对数据不平衡问题给出了解决方案,助力开发者快速掌握混凝土缺陷识别技术。

weixin_42651281的博客 256

【Linux】Shell 脚本编程——字符串操作命令练习

Shell脚本编程综合练习摘要 本文包含Linux shell脚本编程的综合练习,主要涵盖字符串处理和相关脚本编写。通过实例演示了字符串显示的各种方式(单引号、无引号、Here Document、Here String)、字符串截取操作(从指定位置显示、计算长度、输出指定范围字符)以及字符串删除操作(最短匹配和最长匹配删除)。所有练习内容都整合成了两个可执行脚本:lxj.sh(字符串显示操作)和xj.sh(字符串删除操作)。

weixin_55767624的博客 1752

OBS直播美颜全攻略:从插件下载到参数调校一站式指南

本文提供OBS直播美颜插件从下载安装到参数调校的一站式指南。详细介绍了如何安全获取并安装OBS美颜插件,重点讲解了在OBS中添加美颜滤镜的核心步骤,并分享了磨皮、肤色调整、细节增强等关键参数的实战调校技巧,帮助主播打造自然、专业的直播形象。

weixin_29197835的博客 328

算法之字符串匹配问题(Java练习题)

字符串匹配问题 【题目】 给定字符串str,其中绝对不含有字符'.'和'*'。再给定字符串exp, 其中可以含有'.'或'*','*'字符不能是exp的首字符,并且任意两个 '*'字符不相邻。exp中的'.'代表任何一个字符,exp中的'*'表示'*' 的前一个字符可以有0个或者多个。请写一个函数,判断str是否能被 exp匹配。 【举例】 str="abc",exp="abc",返回true。 str="abc",exp=&amp

月夜的博客 3229

光学设计进阶:Zemax中的坐标断点与离轴系统优化

本文深入解析了Zemax中坐标断点的核心原理与实战应用,它是实现离轴光学系统设计的关键。文章通过比喻和实例,详细阐述了如何利用坐标断点作为“方向盘”来精确控制光学元件的偏心和倾斜,实现“前断后接”的局部坐标系变换,从而构建并优化无中心遮拦的离轴反射系统,避免光线失控。

3a9bq4r8t2y的博客 525

从零到一:YOLOv11高帧率模型在RDK X5上的ONNX转换与部署实战

本文详细介绍了将最新的YOLOv11高帧率模型部署到地平线RDK X5开发板的完整实战流程。内容涵盖从PyTorch模型导出ONNX、地平线工具链环境配置与模型量化编译,到编写高效的板端推理代码,并针对高帧率目标进行了后处理优化。通过实战避坑指南,帮助开发者在RDK X5上实现30FPS以上的实时目标检测。

weixin_29089057的博客 139

用java实现字符串匹配问题

考题:判断字符串 a 是否包含字符串 b,这里称 a 为文本串,b 为模式串。 代码如下: import java.util.Scanner; public class demo { /** * 判断是否匹配 * * @param target 目标文本串 * @param mode 模式串 * @return 匹配结果 */ public static boolean matchString(String target,

数据知道的博客 3万+

YOLOv8知识蒸馏实战:用BCKD和LD在自制数据集上分别提点1.63%和1.69%的保姆级教程

本文详细介绍了在YOLOv8模型上应用知识蒸馏技术(BCKD和LD方法)的实战教程,通过自制数据集实现性能提升1.63%和1.69%。内容涵盖环境配置、模型选择、BCKD和LD的具体实现及调参技巧,适合目标检测领域的开发者和研究者。

weixin_29082143的博客 245

c语言给定一个字符串匹配,使用C语言解决字符串匹配问题的方法

最常想到的方法是使用KMP字符串匹配算法:#include #include #include int get_nextval(char *pattern, int next[]){//get the next value of the patternint i = 0, j = -1;next[0] = -1;int patlen = strlen(pattern);while ( i <...

weixin_33907300的博客 940

YOLOv8 Neck改进:BiFPN双向特征金字塔网络解析与实践

本文详细介绍了如何在YOLOv8中集成BiFPN双向特征金字塔网络,包括原理解析、代码实现、配置文件修改和性能分析。BiFPN通过双向特征融合和加权特征机制,显著提升了多尺度目标检测的性能。希望通过本文的讲解,大家能够深入理解BiFPN的工作原理,并成功将其应用到自己的目标检测项目中。如果你有任何问题或建议,欢迎在评论区留言讨论!在下一篇文章中,我们将探讨YOLOv8的其他改进技术,包括注意力机制、新的损失函数等,敬请期待!

QQ_778132974的博客 991

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

第2章 带通配符的字符串匹配问题

字符串匹配问题,给定一串字符串,按照指定规则对其进行匹配,并将匹配的结果保存至output数组中,多个匹配项用空格间隔,最后一个不需要空格。 要求: 匹配规则中包含通配符?和*,其中?表示匹配任意一个字符,*表示匹配任意多个(>=0)字符。 匹配规则要求匹配最大的字符子串,例如a*d,匹配abbdd而非abbd,即最大匹配子串。 匹配后的输入串不再进行匹配,从当前匹配后的字符串重新

HeJiMiDeYueDing的专栏 962

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 编程练习1:加法
下一篇: 编程练习3:ASCII码排序
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值