玩转C++小项目之短链接Demo

2023-11-08

玩转C++小项目之短链接Demo

真实的短链接相对来说比较复杂,例如:hash算法、放号系统等等。

今天只是从小项目角度模拟一个短链接实现。

如何通过短短的几十行代码快速实现一个?其中涉及的几个关键点:

  • 如何将长链接缩短

  • 如何存储映射关系

映射关系就不用说了,整一个map持久化内存,如果涉及到数据库,需要通过数据库的jdbc/odbc等接口访问写入库当中。

长链接缩短这里采用随机算法+固定长度思路来实现。

1.随机

通过uniform_int_distribution,生成一个[a, b]区间的随机数,这里随机从下列字符串中每次取一个字符,最后拼接起来就是短链接。

string characters{
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"};

包含:

  • 数字

  • 小写字母

  • 大写字母

uniform_int_distribution<int> distribution(0, characters.size() - 1);
string code;
for (int i = 0; i < length; ++i)
  code += characters[distribution(generator)];

2.存储

每次将其存储到map中即可,例如:

if (links.count(originalLink)) {
  return links[originalLink];
}

shortCode = generateRandomCode(len);
string shortenedLink = base_url + shortCode;
links[shortenedLink] = originalLink;

这里保留了基本url,例如:

string baseUrl = "https://www.google.com.hk/search";
LinkShortener shortener(baseUrl);

string originalLink = "https://www.google.com.hk/search?q=asdsad&oq=asdsad&aqs=chrome.0.69i59j69i57j69i59l2.634j0j4&sourceid=chrome&ie=UTF-8";
string shortenedLink = shortener.shortenLink(originalLink, 8);

最后便可以将这个url缩短为:

https://www.google.com.hk/searchtXuOlOSt

是不是很简单,本节的测试与完整代码已在星球更新,欢迎加入一起学习成长~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

玩转C++小项目之短链接Demo 的相关文章

  • 运行应用程序时.NET 3.5 JIT 不工作

    以下代码在 Visual Studio 内部运行该版本和在 Visual Studio 外部运行该版本时提供不同的输出 我正在使用 Visual Studio 2008 并面向 NET 3 5 我也尝试过 NET 3 5 SP1 在 Vis
  • 成员字段、构建顺序

    在 C 中 当执行如下所示的操作时 构造顺序是否得到保证 Logger Logger kFilePath logs runtime log logFile kFilePath 是的 施工顺序始终得到保证 但是 不能保证它与对象在初始值设定项
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 区块链的数据结构和数据存储

    区块链的数据结构和数据存储 一 区块链是什么 1 1 公链 1 2 联盟链 1 3 私链 二 公链BTC和联盟链长什么样 2 1 共性 2 2 特性 三 区块链为什么安全 防篡改 四 区块链可以做什么 4 1 货币发行 比特币 4 2 证明
  • 基于微信小程序的办公用品销售系统设计和实现(源码+lw+部署文档+讲解等)

    前言 博主介绍 全网粉丝10W CSDN特邀作者 博客专家 CSDN新星计划导师 全栈领域优质创作者 博客之星 掘金 华为云 阿里云 InfoQ等平台优质作者 专注于Java 小程序技术领域和毕业项目实战 精彩专栏 推荐订阅 2023 20
  • Matlab笔记

    这里写自定义目录标题 Matlab笔记 统计矩阵中非0元素的个数 Matlab笔记 统计矩阵中非0元素的个数 sum sum A 0
  • WebBrowser控件使用详解

    WebBrowser控件使用详解 方法 说明 GoBack 相当于 IE的 后退 按钮 使你在当前历史列表中后退一项 GoForward 相当于IE的 前进 按钮 使你在当前历史列表中前进一项 GoHome 相当于IE的 主页 按钮 连接用
  • C++学习之lambda表达式

    一 基本概念 C 11 引入了lambda表达式 这个特性的最普遍应用 就是配合泛型算法 泛型算法 采用了迭代器操作 从而使得各种不同的容器能使用一套算法 泛型算法允许我们定制自己的操作 即传递一个可调用对象 lambda其实也是一个可调用
  • 华为OD机试 - 导师请吃火锅(Python)

    题目描述 入职后 导师会请你吃饭 你选择了火锅 火锅里会在不同时间下很多菜 不同食材要煮不同的时间 才能变得刚好合适 你希望吃到最多的刚好合适的菜 但你的手速不够快 用m代表手速 每次下手捞菜后至少要过m秒才能再捞 每次只能捞一个 那么用最
  • 数据挖掘导论课后习题答案-第四章

    最近在读 Introduction to Data Mining 这本书 发现课后答案只有英文版 于是打算结合自己的理解将答案翻译一下 其中难免有错误 欢迎大家指正和讨论 侵删 第四章 a Gini 1 0 5 2 0 5 2 0 5 b
  • prod函数,cumprod函数【Matlab】

    1 prod函数 prod函数用于求矩阵元素的积 其调用格式如下 1 B prod A 若A为向量 则返回所有元素的积 若A为矩阵 则返回各列所有元素的积 2 B prod A dim 返回矩阵A中的第dim维方向的所有元素的积 prod函
  • shell 脚本一键生成busybox从零创建文件系统for x86_64

    bin sh update images for x86 64 git clone https github com torvalds linux git depth 1 verbose cd linux make defconfig cp
  • Real-world Multi-object, Multi-grasp Detection论文Demo复现

    前言 本文主要参考这篇博客 然后根据自己的实际复现中遇到的问题写出 1电脑的环境 ubuntu16 04 tensorflow gpu1 12 0 cuda9 0 cudnn7 2 https github com ivalab 论文资源的
  • wsl下redis环境搭建及部署模型

    安装编译依赖 sudo apt install gcc sudo apt get install pkg config sudo apt get install build essential 遇到错误 jemalloc jemalloc
  • Java多线程-线程中断interrupt

    前言 这里主要探讨中断常用的三个方法 interrupt 在一个线程中调用需要中断现成的interrupt 方法 会对该线程发出信号 将中断状态标志为true isInterrupted 判断当前线程的中断状态 interrupted 将线
  • 从入门到入土:nmap出击:使用nmap扫描某台靶机,给出并解读靶机环境的配置情况

    此博客仅用于记录个人学习进度 学识浅薄 若有错误观点欢迎评论区指出 欢迎各位前来交流 部分材料来源网络 若有侵权 立即删除 本人博客所有文章纯属学习之用 不涉及商业利益 不合适引用 自当删除 若被用于非法行为 与我本人无关 nmap出击 任
  • 使用开源my-deploy工具实现开发环境的代码自动化部署

    编者按 由于公司内部存在的开发系统 内网开发 外网预发布 外网生产环境 程序员频繁的更新代码造成运维人员大量时间被占用 于是有了使用该开源工具的部署测试环节 在这里感谢该开源工具的作者 也希望我这边文档能多少帮助需要类似开发环境的技术人员
  • Linux之NFS服务器

    目录 Linux之NFS服务器 简介 NFS背景介绍 生产应用场景 NFS工作原理 NFS工作流程图 流程 NFS的安装 安装nfs服务 安装rpc服务 启动rpcbind服务同时设置开机自启动 启动nfs服务同时设置开机自启动 NFS的配
  • VMware中快照如何使用

    目录 自说 快照与备份的区别 使用 自说 所谓快照 简单点来讲就如同相机中的一张照片 这张照片只要存在就可以回到拍照之前的状态场景 系统快照就是把系统中的当前状态记录在一个文件中 这个文件通常在你保存虚拟机的工作空间中 当我们在使用系统是误
  • 贝叶斯网的R实现( Bayesian networks in R)bnlearn(3)

    4 参数学习 得到贝叶斯网的网络结构之后 可以对局部分布的参数进行参数估计了 这称作参数学习 4 1参数学习的基本方法 bnlearn包的参数学习函数是bn fit 其参数method给出了两种具体的方法 mle 为极大似然估计 bayes
  • 2023最新版Android studio安装入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

    目录 JDK安装与配置 一 下载JDK 二 JDK安装 三 JDK的环境配置 四 JDK的配置验证 Android studio安装 Android studio连接手机真机调试 以华为鸿蒙为例 一 新建一个android项目 二 进入项目
  • 如何将自建的matlab神经网络的激活函数使用gensim生成simulink模型

    要把自定义的matlab激活函数生成到simulink模型中 必须在simulink神经网络库的激活函数子库中添加相应的激活函数 如何打开simulink的神经网络库 这里有两种方法 一种是在命令窗口中输出 neural 就会弹出以下窗口
  • 玩转C++小项目之短链接Demo

    玩转C 小项目之短链接Demo 真实的短链接相对来说比较复杂 例如 hash算法 放号系统等等 今天只是从小项目角度模拟一个短链接实现 如何通过短短的几十行代码快速实现一个 其中涉及的几个关键点 如何将长链接缩短 如何存储映射关系 映射关系