C++ 中短字符串的快速算法

C++快速幂算法 阅读详情
如果我们在实际工程中,碰到的字符串都是小于8个字节的短字符串,我们可以通过以下的方法优化来提升系统的性能

就是将字符串pack到一个64位整数里。

下面的算法将短字符串转换为一个整数

inline void convert(const string & buf, uint64 & n) 
{ 
     n 
= 0; 
     
int length = buf.length(); 
     
for(int i = 0; i < length; ++i) 
     
{ 
          n 
= (n << 8) + (uint64)(buf[i]); 
     }
 
}

我们在此基础上实现一个查找算法

class ShortString 
{ 
public: 
     ShortString(
const string & buf) 
     
{ 
          convert(buf,m_str); 
     }
 
 
     
bool find(const uint64 & nsub, const int num) 
     
{ 
          uint64 n; 
          uint64 mask 
= 0; 
          
for(int i = 0; i < num; ++i) 
          
{ 
               mask 
= (mask << 8) + 0xFF; 
          }
 
          
for(int i = 0; i < 8; ++i) 
          
{ 
               n 
= (m_str >> (8 * i)); 
               
if(n < nsub) break; 
               n 
= (n & mask); 
               
if(n == nsub) return true; 
          }
 
          
return false; 
     }
 
 
private: 
 
private: 
     uint64 m_str; 
}
;

测试函数如下

int main()
{ 
     
string buf = "abcdefgh";
     ShortString shortstr(buf);
     
string sub = "cddg"; 
     uint64 nsub; 
     convert(sub,nsub);
     time_t begin_time,end_time; 
 
     
if(shortstr.find(nsub,4)) cout << "ok" << endl;
 
     begin_time 
= clock (); 
     
for(int i = 0; i < 10000000; ++i)
     
{ 
          
if(shortstr.find(nsub,4)); 
     }
                                                                                                                                                  
     end_time 
= clock ();
     cout 
<< end_time - begin_time << endl;
 
     begin_time 
= clock ();
     
for(int i = 0; i < 10000000; ++i)
     
{ 
          
if(buf.find(sub));
     }

     end_time 
= clock ();
     cout 
<< end_time - begin_time << endl;
 
     
return 0; 
}
 


根据测试,这个方法比普通的快4倍左右
C++文件的读写和对多行多个字符串的处理 C++读写文件中的字符串 今天帮人做了个简单的作业,没想到花时间最多的不是算法而是文件的读写,还有对读入字符串的分割处理。晚上写作业的时候又用到了对字符串的处理,这里记录一下。 代码有查阅各种资料,但是成品为原创。 重点是文件的读和写 #include 文件的读:从内存(硬盘)读到缓冲区屏幕 ifstream in; in.open(fileName.data(), ios::in); /... 阅读详情

相关推荐

C++ 高性能模糊字符串匹配库 rapidfuzz-cpp 完整实战指南

本文介绍高性能C++模糊匹配库rapidfuzz-cpp,它是Python RapidFuzz的C++移植实现,采用MIT协议,纯头文件设计,支持跨平台。文章详述了三大核心优势:数十倍性能提升、完整算法体系、极低接入成本;提供了3种CMake集成方案;横向对比了ratio、partial_ratio等主流相似度算法的适用场景;并给出完整可运行示例代码,覆盖文本预处理、各类相似度计算和批量检索。该库特别适合电商搜索、数据清洗、OCR校正等需要处理文本差异的场景,是C++生态中高效的模糊匹配解决方案。

踏板鞋的专栏 505

c++(从键盘接收5个字符串,找出其中的最大和最小的字符串。)

从键盘接收5个字符串,找出其中的最大和最小的字符串。 #include<iostream> #include<string> using namespace std; int main() { string str[5],maxm,minm; for(int i=0;i<5;i++) cin>>str[i]; ...

Kerryliuyue的博客 4404

C/C++ Rabin Karp算法字符串快速查找算法详解及源码

Rabin Karp算法是一种字符串快速查找算法,用于在一个主串中查找一个模式串的出现位置。它利用了字符串的哈希值来进行匹配,因此在某些情况下比传统的字符串匹配算法更高效。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 7763

找最小的字符串(C/C++):

7-10 找最长的字符串(15分) 本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。 输入格式: 输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。 输出格式: 在一行中用以下格式输出最长的字符串:

xiaoxie_life_study 734

Win10/Win11系统下,用VSCode编译Betaflight固件最全避坑指南(从GCC安装到HEX生成)

本文详细介绍了在Win10/Win11系统下使用VSCode编译Betaflight固件的完整流程,包括GCC安装、环境变量配置、终端选择、Make工具安装等关键步骤,帮助开发者避开常见陷阱,高效生成HEX文件。特别针对VSCode环境优化和编译错误排查提供了实用解决方案。

weixin_42557803的博客 415

AI驱动视频剪辑自动化:cutcli命令行工具重塑工作流

视频剪辑自动化是提升内容生产效率的关键技术,其核心原理在于通过程序化指令替代手动操作,将创意执行过程代码化。这项技术的价值在于能够将创作者从重复性劳动中解放,实现批量化、标准化的视频内容生产,尤其适用于社交媒体运营、产品宣传等高频产出场景。通过封装专业软件(如剪映/CapCut)的底层草稿格式,自动化工具在保证工业级渲染质量的同时,提供了可编辑的中间态,为AI智能体(Agent)与生产工具的结合提供了清晰接口。本文以cutcli为例,深入探讨了如何通过命令行工具和AI助手,构建从自然语言指令到可编辑视频草稿

weixin_27210125的博客 1063

【C++语法】C++处理字符串的方式

第一种:用C语言字符数组的方式 1、字符数组的初始化: 方法一:和普通数组一样初始化 char dog[8] = {'b', 'e', 'a', 'u', 'x', '', 'I', 'I'}; //不是字符串 char cat[8] = {'f', 'a', 't', 'e', 's', 's', 'a', '\0'};//是字符串 注意:字符数组需要以空字符'\0'结尾 将字符数组初始化为字符串的工作看上去冗长乏味——使用大量的单引号,且必须加上空字符,这里有一种更好的、将字符数组初始化为字

qq_43601446的博客 1804

K230开发板实战:5步搞定YOLOv8模型部署(附常见报错解决方案)

本文提供了一份详细的K230开发板部署YOLOv8模型的实战教程。内容涵盖从环境准备、模型转换到代码编写的完整流程,并重点解析了使用AICube工具链时常见的“生成部署文件异常”等报错解决方案,旨在帮助开发者高效完成嵌入式AI模型部署。

weixin_29053073的博客 784

长度最小的子数组/C++

输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。

qq_43691090的博客 234

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 568

爬虫Incapsula reese84加密案例:Etihad航空

声明:该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。

老衲爱洗头的博客 2429

查找最小的子串

没事做了一个查找最小的子串的题目源代码如下: #include main(){  char *a="fdsf fdsfasf fasfafasf fdafa fafaa asdf afdfsfsdfsfsdfsdfsd";  char *ptr;  int max=0,num=0;  ptr=a;  while(*ptr!=/0)    {         if((*ptr)!=3

xiehuin的专栏 979

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2460

RapidFuzz-CPP:高效字符串相似度计算的C++利器

RapidFuzz-CPP是一款高性能C++字符串相似度计算库,支持Levenshtein距离、Jaro-Winkler等多种算法,具有SIMD加速和缓存优化等特点。该库采用纯头文件设计,支持跨平台使用,在数据清洗、中文文本匹配等场景中表现优异。通过基准测试显示,其性能比标准实现提升7-9倍。最佳实践包括使用UTF-8编码、数据预处理和合理选择算法。该库简化了文本相似度计算,为开发者提供了高效的解决方案。

llhllq2015的博客 1245

2025华为OD面试手撕代码真题目录及面试八股文

本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备

KJ.JK 5万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Rapidfuzz-cpp:高性能的字符串匹配库

Rapidfuzz-cpp:高性能的字符串匹配库 在软件开发和数据处理中,字符串匹配是一个常见且重要的任务。Rapidfuzz-cpp 是一个高性能的字符串匹配库,使用 Levenshtein 距离算法来实现模糊字符串匹配。以下是对该项目的详细介绍。 项目介绍 Rapidfuzz-cpp 是一个为 C++ 和 Python 提供快速字符串匹配的库,基于 FuzzyWuzzy 的字符串相似度计算。R...

gitblog_01062的博客 804

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

cert-manager 全面支持 certificates.k8s.io CertificateSigningRequest:设计决策与落地实践

> 本篇技术指南以 cert-manager 仓库中的设计文档 [design/20210209.certificates.k8s.io-adoption.md](https://link.gitcode.com/i/72dbf3806b99a953ddb69a435935c031) 为核心骨架,结合仓库内 `pkg/controller/certificatesigningrequests/`

gitblog_00390的博客 996

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

xxhash_cpp: 高性能哈希算法库在C++中的实现

xxhash_cpp: 高性能哈希算法库在C++中的实现 项目介绍 xxhash_cpp 是一个基于 xxHash 算法的C++封装库,xxHash是一款极其快速的非加密哈希算法,它专为接近RAM速度运行而设计。该算法提供了多种变体,包括 XXH32、XXH64、XXH3_64bits 和 XXH3_128bits,适用于不同的数据处理场景。xxhash_cpp 库让C++开发者能够轻松地将这一高...

gitblog_00236的博客 781

一种快速的字符串匹配算法

/* 快速字符串查找函数:目前比较流行的字符串有KMP与BM算法,实际上KMP算法在使用的时候比strchr快不了多少,而BM算法也大约只有KMP算法的3~5倍。这里介绍一个快速字符串查找函数。举一个例子:"Hello, world"中查找"word"子串,可以先把两个字符串按照首字节对好:Hello, worldworld我们可以看出刚开始是不能匹配的,这样需要将子串往后移,至于每次

qinzx2004的专栏 2695

KMP算法详解及C++实现

目录一、介绍KMP算法解决的问题二、KMP算法的核心思想三、KMP的代码实现(C++) 一、介绍KMP算法解决的问题 KMP算法实际上解决的是一个字符串匹配的问题,即从一个目标字符串(通常非常长)中找到与给定字符串(也称为模式串)相匹配的字串的位置,例如: 目标串:ABB ABABCABAA CAADB ABABCABAADDABC 模式串:ABABCABAA 那么如果用人脑去找,很容易找出模式串在目标串出现的位置有第 二、KMP算法的核心思想 三、KMP的代码实现(C++) ...

yxy1301446882的博客 1万+

10min快速回顾C++语法(五)字符串专题

C++的语法基础(五)⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。字符与整数——ASCII码 8.2 字符数组 8.2.1 字符数组的输入输出: 8.2.2 字符数组的常用操作 8.2.3 遍历字符数组中的字符 8.3 标准库类型string 8.3.1 定义和初始化 8.3.2 string上的操作 8.3.3 处理string对象中的字符......

timerring的博客 1万+

Node-RED 数据处理实战手册:JSON、XML、CSV 的互转与排错

Node-RED 的数据处理,主要靠核心解析器里的一组节点完成:JSON、XML、CSV(还有 HTML、YAML),它们能把 msg 里的字符串、对象和表格数据互相转换。这篇文章不按"技巧清单"罗列,而是跟着一条数据在流程里走完全程:怎么从字符串变成对象,怎么在 XML 和 CSV 之间互转,字段对不上或坏消息出现时怎么办,最后再看怎么提速。 ## 数据入口:三步把 JSON 字符串解析成对象

gitblog_00964的博客 1058

【亲测免费】 UTF8-CPP库使用教程

UTF8-CPP是一款简洁高效的C++库,专门设计用于跨平台地处理UTF-8编码字符串。此库遵守C++98标准,为C++开发者提供了一个简单而又易于移植的方法来处理Unicode编码字符串。对于已经熟悉STL算法和迭代器的开发者而言,它能够无缝集成现有工作流程。 ### 主要特性: - **跨平台性**:可在各种操作系统和编译器环境下运行。 - **轻量化**:无额外依赖项,易于集成至已有项目...

gitblog_00496的博客 1388

Playwright Test TestProject 配置详解:多项目编排、依赖链与并行控制的完整指南

本文基于 Playwright 仓库的 API 文档 `docs/src/test-api/class-testproject.md` 展开,系统讲解 `TestProject` 的全部配置项及其解析优先级,并结合 `packages/playwright/src/common/config.ts` 等源码实现,说明多浏览器/多设备项目如何声明、`dependencies`/`teardown`

gitblog_01174的博客 835

c++ 使用分而治之算法进行快速乘法的 Karatsuba 算法(唐叶算法)

唐叶算法 看一下上面的公式,有四次大小为n/2的乘法,所以我们基本上将大小为n的问题分为四个大小为n/2的子问题。但这并没有帮助,因为递归 T(n) = 4T(n/2) + O(n) 的解是 O(n^2)。在经典方法中,时间复杂度为O(n^2),因为循环迭代了 n 次。在Karatsuba 方法中,辅助空间为O(n),因为Karatsuba 类的“乘法”方法是针对三个乘积中的每一个递归调用的。通过上述技巧,递推式变为 T(n) = 3T(n/2) + O(n) 并且该递推式的解为 O(n 1.59 )。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1171
上一篇: javascript:如何获得鼠标在屏幕上的位置
下一篇: C++初学者应该关心的优秀图书一览
xlvector
博客等级 码龄21年 64粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值