起因只是想通过字符代码,来替换存储文件数据。不知道大家有没有玩过炉石传说,它可以通过二几个长度的字符串中读取30张卡的编号(牌库上千张卡),我也想做一个这样的字符串代码,用于数据交换
#ifndef COMPRESS_STRING_H
#define COMPRESS_STRING_H
#include <string>
#include <map>
#include <iostream>
using namespace std;
class CompressedString {
private:
map<char,int> characterSet; //构建字符字典
int bitSize; //压缩单个字符后所占二进制位
public:
CompressedString(string); //通过字符集构造
string compress(const string& str); //压缩字符串
string uncompress(const string& cp); //解压缩
void setCharacterSet(const string& s); //设置字符集
void display(const string& s); //输出对比
};
#endif // COMPRESS_STRING_H
#include "CompressedString.h"
CompressedString::CompressedString(string s){
setCharacterSet(s);
}
string CompressedString::compress(const string& raw)
{
string cps(round(raw.size() * (double)bitSize / 8) + 1, ' ');
char ch = 0;
int index = 0;
int pos = 0;
for (int i = 0; i < raw.size(); i++) {
for (int j = 0; j <bitSize; j++) {
ch |= ((characterSet.at(raw[i])>>j) & 1)<<(index++);
if (index == 8) {
cps[pos++]=(ch);
index = ch = 0;
}
}
}
if (index != 0) //当有剩余bit时
cps[pos++] = (ch);
cps[pos++] = index ? 8 - index : 8; //记录末尾bit
return cps;
}
string CompressedString::uncompress(const string& cp)
{
string uncp(((cp.size()-1)*8-(8-cp.back()))/bitSize,' ');
int index = 0;
int pos = 0;
for (int i = 0; i < cp.size()-1;) {
int c = 0;
for (int j = 0; j < bitSize; j++) {
c |= (((cp[i] >> index++) & 1) << j);
if (index == 8) {
i++;
if (i >= cp.size()-1)
break;
index = 0;
}
}
if(pos<uncp.size())
uncp[pos++]=((next(characterSet.begin(), c))->first);
}
return uncp;
}
void CompressedString::setCharacterSet(const string& s)
{
for (int i = 0; i < s.size(); i++)
characterSet.insert({ s[i],i });
bitSize = ceil(log2(s.size()));
}
void CompressedString::display(const string& s)
{
cout << "原始字符串:" << s << "\t压缩字符串:[" << compress(s) << "]\t解压缩字符串:[" << uncompress(compress(s)) << "]" << endl;
}
#include <iostream>
#include "CompressedString.h"
#include <string>
using namespace std;
int main() {
CompressedString s("0123456789ABCDEF");
s.display("123456789");
s.display("123445635464564532546ADCFEA");
wstring str = L"123456" ;
return 0;
}
等级:
买CSAI考试辅导教程(软件设计师考试考点分析与真题详解,上下册) ◆ 中级:软件设计师 上下午各2个半小时。上午试卷有15道必做题,内容包括:数据结构(如树和图的定义、存储和操作),程序语言及编译知识,操作...
做算法和作技术哪个难? 都很难, 没有可比性. 但是算法做得好的可以转行做技术, 技术做得好的想转行做算法却很困难. <br />我是08年下半年将近期末的时候加入华理ACM队的. 我高中的时候没有编程...
由于传统的图像识 别算法对于验证码的识别准确率及速度很大程度上都依赖于算法的设计及鲁棒性上,实际应用起来效果不是很好。在本次项目中,使用 Tensorflow 框架将卷积神经网络应用于验证码的特征提取及识别上,...
第二章 C/C++快速入门 2.1 基本数据类型及输入输出 2.1.2 变量类型及输入输出 类型 取值范围 占用字节 格式符 int 10的9次方以内整数 4字节(32位) ...%c(字符串%s不加&) bool 0/1 0/1 2.
本书首先通过实用的案例介绍机器学习的基础知识,然后介绍一些稍微复杂的机器学习算法,例如支持向量机、极端随机森林、隐马尔可夫模型、条件随机场、深度神经网络,等等。 用最火的 Python 语言、通过各种各样的...
第2章 《算法竞赛入门经典(第2版)》习题选解
目前参考了大量的优秀的大牛的博文自己总计的超详细哈希表 1.哈希表的简介 2.哈希表的哈希函数构造 3.冲突处理 4.查找分析计算 5.C++完整实现代码
支持向量机通俗导论(理解SVM的三层境界) 分类: 30.Machine L&Data Mining2012-06-01 22:48 3882人阅读 评论(18) 收藏 举报 支持向量机通俗导论...出处:结构之法算法之道blog。 前言
一、考试说明分析 软件设计师考试的总体要求 软件设计师主要完成三项工作:(1)编写文档;(2)组织指导程序员开展工作;(3)软件优化和集成测试,开发高质量软件。本工作要求具有工程师的实际工作能力和业务...
软件设计师考试的总体要求软件设计师主要完成三项工作:(1)编写文档,(2)组织指导程序员开展工作,(3)软件优化和集成测试.开发高质量软件.本工作要求具有工程师的实际工作能力和业务水平.具体讲就是....
一、考试说明分析 软件设计师考试的总体要求 软件设计师主要完成三项工作:(1)编写文档;(2)组织指导程序员开展工作;(3)软件优化和集成测试,开发高质量软件。本工作要求具有工程师的实际工作能力和业务...
上周六参加了梦想的软件设计师的考试,感觉还不错,回来后在网上看了看试题的初步分析 转自 考试吧一、考试说明分析软件设计师考试的总体要求软件设计师主要完成三项工作:(1)编写文档;(2)组织指导程序员开展...
软考中的软件设计师考试大纲分析 一、考试说明分析 软件设计师考试的总体要求 软件设计师主要完成三项工作:(1)编写文档;(2)组织指导程序员开展工作;(3)软件优化和集成测试,开发高质量软件。...
CTF 密码学学习 1.==看密码学视频 有个基本了解 == https://www.bilibili.com/video/BV1Zx411H7RE/?spm_id_from=333.788.videocard.0 密码学网课的笔记: 1.1 概述 密码分析的分类 A.穷举攻击:是指密码分析者...B....C....A....
cut_sentence.py import string import jieba import jieba.posseg as psg import logging #关闭jieba日制 jieba.setLogLevel(logging.INFO) jieba.load_userdict("./corpus/keywords.txt") ...stopwords_path = "......
· 说明 以下均为 Being_young 前辈所写,现转载过来,再加上自己的理解,重新写了一遍,方便自己日后使用 博客地址:http://blog.csdn.net/u013019296/article/ · 目录索引 ...· 最小二乘法对点云
软件设计师考试大纲 一、总体要求 软件设计师主要完成三项工作:(1)编写文档;(2)组织指导程序员开展工作;(3)软件优化和集成测试,开发高质量软件。本工作要求具有工程师的实际工作能力和业务水平。...
七夕节、情人节表白用的HTML源码(两款)
jd_seckill京东抢茅台插件最新版【京东飞天茅台1499抢购】Python脚本的完整安装+使用教程,这个很好用,稳定出单!
SecureCRT中文破解版欢迎大家下载,非最新版本!!!
共六章 1.基础章节,从Shader1.0版本到新的4.5版本,介绍每一个版本中特性的用法; 2.Tesslattion Shader应用/基础案例分析 3.Gemotry Shader应用/基础案例分析 4.Compute Shader应用/基础案例分析 5.通过大量案例讲解分析/结合新特性,介绍用法 6.性能调优,如果借助shader加速应用,让你的程序支撑百万级别的场景对象轻松应对 全面解析OpenGL Shader语言,从1.0到4.5版本,全面掌握shader编成,并能够熟练的应用
Xshell-7.0个人免费版 ,供个人免费使用。 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。
Microsoft office 2016专业增强版是一款由官方发布的Microsoft office办公软件,而且免费开放给所有Windows用户免费使用,其中Excel、word、PPT都非常智能化,界面最新加入暗黑主题,并且按钮的设计风格开始向Windows10靠拢。本平台提供Office 2016专业增强版,需要的朋友可下载试试! Office 2016 专业增强版安装教程 1. 下载
主要为大家详细介绍了python利用可视化技巧实现烟花绽放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
德勤举报PPT.pdf
这个很好用,稳定出单!
2021CFA一级Notes1-5,有5本pdf。
Spring Boot 入门介绍,听完这些课程你可以了解到 Spring Boot 的优势,为什么需要使用 Spring Boot ,学会使用 Spring Boot 创建一个简单的 Hello World ,并写学会使用 Spring Boot 单元测试。 了解 Spring Boot 并掌握 Spring Boot 基础开发
本课程通过讲解Spring Batch的基础知识点以及一些实际的项目示例让大家熟悉如何使用Spring Batch进行大批量数据的同步、处理及转换等。 通过学习本课程大家可以快速的掌握如何使用及优化Spring Batch。
这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等。 适合人群 1. 具备一定编程基础,工作1-3年的研发人员 2. 想阅读 Java 核心源码,但总感觉看不懂的 3. 看了太多理论,但没有实践验证的 4. 求职面试,总被面试题搞的死去活来的