C++/C#搜索字符串的for循环算法(c++查找字符串出现次数)

boyanx6天前技术教程3

1.前言
InfinityHook里面有个搜索字符串的算法比较有意思,如果是在C#里面一行代码即可搜索。但C++则是承担了底层的实现。如何实现的呢?本篇来看下

2.概括
在source里面搜索pattern相同字符串,分别看下C#和C++代码

C#代码:

static void Main(string[] args){ string source= "39 39 39 48 33 33 33 33 33 33 48 85 C0 74 39 39 39"; string pattern = "48 33 33 33 33 33 33 48 85 C0 74"; string result=source.Substring(source.IndexOf(pattern),pattern.Length-5); Console.WriteLine(result); }

C++代码

#include<stdio.h>int main(int argc, char** argv){ /* 案例算法:在source数组里面找到pattern数组里面相同的字符。 */ //数组source里面包含了数组patteren的字符 char source[] = "\x39\x39\x39\x48\x33\x33\x33\x33\x33\x33\x48\x85\xC0\x74\x39\x39\x39"; char pattern[] = "\x48\x33\x33\x33\x33\x33\x33\x48\x85\xC0\x74"; int sourcelength = sizeof(source) - 1; int patternlength = sizeof(pattern) - 1;
char wildcard = 0x33;
//这里source数组长度减去pattern数组长度是为免得下面的for多循环patternlength个体长度 for (int i = 0; i < sourcelength - patternlength; i++) { //found表示如果pattern里面的字符不等于0x33也不等于source数组的的某个字符,直接跳过本轮for循环。 //因为没有找到匹配的 bool found = true; //如果这个for循环到底,found依旧为true,说明找到了,相同字符串的起始索引。 for (int j = 0; j < patternlength; j++) { //这里的判断分为几种情况 // 1. pattern[j] != wildcard==true pattern[j] != (source[i + j] 直接跳过本轮循环,因为没有找到 // 2. pattern[j] != wildcard==true pattern[j] = = (source[i + j] 表示找到了相同字符串,继续 // 3. pattern[j] == wildcard==true 如果是这种情况,第一个判断为false,第二个就不用判断了,继续下一次循环 if (pattern[j] != wildcard && pattern[j] != (source[i + j])) { found = false; break; } } if (found != false) { //这个地方的i索引是第一个for循环+第二个for循环 //在source字符数组里面找到pattern数组相同的字符的其实索引 //这里以为i已经在索引3的位置了,所以下面的循环只能到pattern数组的第二个\x48.后面的3个超了数组的索引极限 // 比如 patternlength+i for (int k = i; k < patternlength; k++) { printf("%x\n", source[k]); } break; } } getchar();}

可以看到C#高度封装,比较简单的几行代码,然C++则多了更多的代码。但C++的算法比较奇特,这里记录下。


相关文章

SCADA|KingSCADA通过自定义函数实现JSON字符串的拼接

哈喽,你好啊,我是雷工!随着计算机的发展,工控SCADA与MES等系统的对接要求越来越多。在KingSCADA中对RESTful接口的调用中,也会使用到JSON字符串的拼接,最近一个项目,也有相关需求...

Nginx的location匹配规则,90%的人都没完全搞懂,一张图让你秒懂

每次改完Nginx配置都得反复重启测试?匹配规则优先级记不清导致线上翻车。运维老司机都懂这种痛:昨天刚上线的新规则被旧配置覆盖了,关键在Nginx的location优先级机制——精确匹配= 最高效但最...

【SQL】常见SQL慢查询问题及解决方法

SQL 慢查询问题的排查和解决需要综合考虑多个方面,包括索引的使用、查询语句的编写、表的关联方式以及数据库的配置等。通过对常见问题的分析和针对性的解决方法,可以有效地提高数据库查询的性能,提升系统的整...

一文读透,Python暴力(BF)字符串匹配算法到 KMP 算法之间的变化

1. 字符串匹配算法所谓字符串匹配算法,简单地说就是在一个目标字符串中查找是否存在另一个模式字符串。如在字符串 " ABCDEFG " 中查找是否存在 “ EF ” 字符串。可以把字符...

python 模块 filecmp &amp; difflib

主要介绍两个 Python 中常用于比较数据的模块,一个是 filecmp 模块,另一个是 difflib 模块。其中,前者主要用于比较文件及目录,后者主要用于比较序列的类和函数,下面具体介绍两者的区...

python进阶100集(7)深入分析字符串乱码问题

字符串乱码问题一直是初学者比较头疼的事情,在之前的python基础专辑里面已经简单介绍过了,今天我们来深入分析一下python字符串乱码问题的原因,同样适用于其他编程语言!#python##pyth...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。