无限制数字(仅仅int类型)的大小的自然排序算法

直接上代码:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cctype>// Function to compare two strings in a natural way
bool naturalCompare(const std::string& a, const std::string& b) {size_t i = 0, j = 0;while (i < a.size() && j < b.size()) {// Skip leading zeros in numbersif (std::isdigit(a[i]) && std::isdigit(b[j])){size_t valA = 0, valB = 0;std::string strA {};std::string strB {};while(i < a.length() && std::isdigit(a[i])) {valA += (a[i] -'0');if(valA != 0) {strA.push_back(a[i]);}i++;}while(j < b.length() && std::isdigit(b[j])) {valB += (b[j] -'0');if(valB != 0) {strB.push_back(b[j]);}j++;}if(strA != strB && strA.size() == strB.size()) {return strA <strB;}if(strA != strB && strA.size() != strB.size()) {return strA.size() <strB.size();}} else {// Compare characters if not both are digitsif (a[i] != b[j]) {return a[i] < b[j];}++i;++j;}}// If we reach the end of one of the stringsreturn a.size() < b.size();
}int main() {std::vector<std::string> vec = {"b3", "", "file1.txt", "file20.txt","fi.txt","a","15","C10","c00013A","c0013A","c00000013A","00000013A","","   ","&&&__","$%^&*()()++","99999999999999999999999999999999999999999","9999999999999999999999aaa9999999999999999999","9999999999999999999999AAA9999999999999999999","a_123456789123456789abc","a_123456789123456789bbc","bcm123bbc445","bcm123bbc4","bcm123bbc4451","bcm123bbc445kk"};// Sort the vector using the naturalCompare functionstd::sort(vec.begin(), vec.end(), naturalCompare);// Print the sorted vectorfor (const auto& str : vec) {std::cout << str << std::endl;}return 0;
}

代码说明:

        .数字和字符分开

                判断是否是数字

                        将a的数字提取到strA,(不加入前缀0,但是中间的0需要)

                        将b的数字提取到strB

                        比较strA和strB是否相等 && strA和strB的size是否相等(不相等,而且位数也不相等)

                                按照位数(size)排序

                        比较strA和strB是否相等 && strA和strB的size是否相等(不相等,而且位数相等)

                                按照字母顺序表排序

                是字符:

                        按照字母顺序表进行排序。

测试结果:

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

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

相关文章

Vue项目启动失败 UnauthorizedAccess

在VSCode中使用yarn dev命令启动项目失败&#xff0c;错误&#xff1a; yarn : File D:\Nodejs\yarn.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?L…

Java中如何处理跨域请求?

Java中如何处理跨域请求&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代Web应用程序开发中&#xff0c;跨域请求&#xff08;Cross-Origin…

linux编译安装openssl-3.0.2

安装openssl3.0.2 openssl版本太低可能影响等保及很多其他工具的安装&#xff0c;记一次编译3.0.2的安装过程。 一、首先先到官网下载最新的openssl&#xff1f; [ Downloads ] - /source/index.html 二、解压openssl包 tar -xzf openssl-3.0.2.tar.gz 三、检查是否已安装…

java版本ERP管理系统源码 Spring Cloud erp系统-更专业的ERP管理系统

ERP&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;软件是一种集成的管理平台&#xff0c;它将企业的所有业务流程&#xff0c;包括采购、销售、库存、财务等&#xff0c;整合到一个统一的系统中。这种整合不仅提高了工作效率&#xff0c;还增强…

电脑硬盘数据恢复,4个方法,轻松恢复数据

在数字化时代的浪潮中&#xff0c;电脑硬盘不仅是存储数据的仓库&#xff0c;更是我们生活、工作、学习的记忆宫殿。然而&#xff0c;当这个宫殿中的一部分珍贵记忆突然消失&#xff0c;仿佛历史的片段被无情地抹去&#xff0c;我们不禁会感到焦虑和恐慌。此时&#xff0c;电脑…

【播客笔记】摸着大佬入门!把〖AI+能源〗〖AI+硬件〗两个热门话题彻底聊透! | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; 1. 硅谷101 | 科技巨头们开始抢电&#xff1f;聊聊AI用电荒和核聚变创业热 播客链接 → https://www.xiaoyuzhoufm.com/episode/663035780571efa80f8…

基于springboot在线考试报名系统-计算机毕业设计源码031706

摘 要 随着计算机技术的迅猛发展&#xff0c;学校教学和管理的信息化发展也有长足的进步&#xff0c;考试也是一样。与传统的考试方式相比&#xff0c;网络考试报名系统极大地提高了考试的灵活性&#xff0c;并在许多领域已经有了广泛的应用。网上考试报名系统的最大优点是可以…

Java基础入门day69

day69 mybatis 开发步骤 查询 前期准备&#xff1a;数据库表结构和表数据准备 mysql> select * from user; ------------------------------------------------ | uid | username | password | email | phone | address | ---------------------------------------------…

2、广告-参与者

程序化广告生态系统中的参与者主要分为五大类&#xff1a;需求方、需求方服务、流量供应方、流量方服务以及广告服务与数据管理相关平台和企业。以下是每个角色的详细描述&#xff0c;以及中文名词与其对应的英文名词。 一、需求方&#xff08;Demand Side&#xff09; 效果类…

视频文件太大怎么压缩?十大视频压缩软件可解决您的问题

您是否已经受够了无法上传视频文件&#xff0c;因为它们太大了&#xff1f;如果您正在积极寻找免费下载的视频压缩软件&#xff0c;下面概述了目前在线提供的 10 个功能更强大的软件。 我们建议您在决定下载之前先通读一下这个简短的介绍。我们不希望您随意点击一个选项&#…

2024年JCR分区,将发生重大变化

科睿唯安官方微信发布消息&#xff0c;指出今年的期刊排名及相应JCR分区将发生重大变化。 原文比较长&#xff0c;不熟悉相关规则的朋友也不太容易读懂。因此&#xff0c;我们今天做一个详细的解读。 首先明确几个基本概念&#xff1a; &#xff08;1&#xff09;2024年发布2…

基于PHP+MySql的留言管理系统的设计与实现

功能概述 网页留言板管理系统&#xff0c;用户层面分为普通用户和管理员&#xff0c;并设权限&#xff08;即后台留言管理系统普通用户不能访问&#xff0c;别人的留言自己不可以修改删除&#xff0c;未登录不能使用留言功能&#xff09;&#xff0c;功能包括用户登录注册、留…

阿里云+Halo个人博客搭建

前言 本文将介绍使用阿里云Halo搭建一个个人网站&#xff0c;过程极其简单&#xff0c;不需要什么计算机基础&#xff0c;操作电脑跟着步骤做就行。 在开始之前&#xff0c;还需要做一些前置准备 购买好服务器&#xff0c;本文使用阿里云&#xff0c;系统选择CentOS 7.6 64位…

Ollama:一个在本地部署、运行LLM大型语言模型的工具

Ollama部署、运行大型语言模型 概述 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计的工具。 官方网站&#xff1a;https://ollama.com/ Github&#xff1a;https://github.com/ollama/ollama 安装 Ollama支持macOS、Linux和Win…

【MOS管线性区如何让调整】

1.怎样设定管子的Vdsat大小&#xff1f; 各管的Vdsat完全决定于管子的偏置栅压Vg而不用去考虑Vs&#xff0c;由于Vgs决定电流Id而反过来偏置电流Id决定Vgs&#xff0c;确定的电流偏置下Vs会自动跟随Vg而得到合适的Vgs&#xff0c;连接于同一个Vg栅压偏置的各管会有同样大小的Vd…

[吃瓜教程]南瓜书第3章对数几率回归

第三章 对数几率回归 3.1 算法原理 对数几率回归&#xff08;Logistic Regression&#xff09;是一种统计方法&#xff0c;主要用于二分类问题。它通过拟合一个对数几率函数&#xff08;logit function&#xff09;&#xff0c;即对数几率&#xff08;log-odds&#xff09;与…

构建基于LLM的高效知识库问答系统:MaxKB一站式开源解决方案探析

随着人工智能技术的飞速发展,尤其是大型语言模型(LLMs)的广泛应用,知识管理与交互进入了新的纪元。今天,我们将深入探讨一个创新的开源项目——MaxKB,这是一个集成了最新技术、旨在提供一站式解决方案的知识库问答系统。MaxKB以其开箱即用、高度可定制性以及对多种主流大…

python并发执行request请求

在Python中&#xff0c;我们可以使用requests库来发送HTTP请求&#xff0c;并使用threading、multiprocessing、asyncio&#xff08;配合aiohttp&#xff09;或concurrent.futures等库来并发执行这些请求。这里&#xff0c;我将为我们展示使用concurrent.futures.ThreadPoolExe…

淘宝店铺商家订单API-接入ERP,多平台订单同步的利器

淘宝开放平台给商家们提供了丰富的API&#xff0c;以方便大家扩展业务流程。但是需要调用这些API&#xff0c;商家们要提交资质审核&#xff0c;审核条件也是很严格的。第三方数据公司的存在可以为大家解决这个问题。 custom-自定义API操作 请求参数 请求参数&#xff1a;ap…

线上数据线下使用的数据处理方法:数据脱敏

在信息技术领域,敏感数据是指那些一旦被泄露或滥用,可能会对个人隐私、企业利益或国家安全造成严重影响的信息。这类数据通常包括但不限于: 个人信息:如姓名、身份证号、联系方式、住址等。 财务信息:如银行账户、信用卡号、交易记录等。 商业机密:如产品设计、市场策略、…