HeaderFile 2.0 | tool.h

Download

也可以探索一下其他头文件!

写的比较好的头文件:

rand.h

password.h

tool.h

colorlinux.hpp

wignored.h (刚开始写)

右边这些都是板子,没什么新意,但是很好: matrix.h / modint.h / array.h

右边这个是奇怪的东西:server.hpp (Windows only)

字符串处理部分

substr()

定义(一) const string substr(const string &x,string expr="")

引自 python 的字符串切片功能

传入的两个参数,第一个参数为被切片的字符串,第二个参数为限定参数

  • 当限定参数为空时返回原字符串
  • 第一参数:返回的子串的开始位置,为空或为 \(0\) 则从头开始
  • 第二参数:返回的字串的结束位置(遵循左开右闭原则),为空或为 \(0\) 则为结束位置
  • 第三参数:步长,步长为 \(x\) 表示每隔 \(x\) 个字符取一个字符
  • 三个参数之间可以以 ; , . / : 作分隔符

负数行为

  • 对于一、二参数,如果传入负数 \(x\) 则定位到 “倒数第 \(x\) 位”
  • 对于第三参数,如果传入负数则逆转字符串

报错行为 (RE - hdk::tool::bad_expression())

  • 对于传入超过三个参数的行为报错
  • 对于下标越界报错

实例

const string x="huge is the big big";
cout<<substr(x,"3")<<endl;   //e is the big big
cout<<substr(x,"-5")<<endl;   //g big
cout<<substr(x,"2:7")<<endl;   //ge is
cout<<substr(x,":7")<<endl;   //huge is
cout<<substr(x,"0,7")<<endl;   //huge is
cout<<substr(x,"0:")<<endl;   //huge is the big big
cout<<substr(x,"::2")<<endl;   //hg stebgbg
cout<<substr(x,"//-1")<<endl;   //gib gib eht si eguh
cout<<substr(x,"0 4 -1")<<endl;   //eguh
//cout<<substr(x,":::")<<endl;  //报错

定义(二) const string substr(const string &x,int opt0=0,int opt1=0,int opt2=0)

传入的三个数字相当于定义(一)的三个参数

定义(三)const string substr(const string &x,int start_pos,int length)

相当于 x.substr((start_pos,length)

class str_t

可以传入一个静态字符串来切片

str_t str("huge");
cout<<str["0 3"]; //hug
cout<<str("0 0 -1"); //eguh
cout<<str(0,0,-1); //eguh
vector<int>v={0,0,0,-1};
cout<<str(v); //eguh

lowercase/uppercase

定义 const string lowercase(const string&x)/const string uppercase(const string&x)

转换字符串中的大小写字母

string x="Ab:6";
cout<<lowercase(x);//ab:6
cout<<uppercase(x);//AB:6

该函数适配 std::string,对于 hdk_string 的适配详见 (defination.h) hdk::__reflection_t

class string_hash

自动字符串哈希

定义 class string_hash<typename return_value_type=unsigned long long,return_value_type numer=233,return_value_type mod=0>

return_value_type 哈希返回值类型

numer 进制

mod 模数,mod=0 则不取模

定义后可以使用 () 直接调用哈希

文件内已经用默认参数定义了一个哈希方法 strhash

string_hash<int,23,10007>h;
cout<<h("CTHoi");   //8268
cout<<strhash("CTHoi");   //198535278991

to_string()

定义 std::string to_string(T x)

将数字转为字符串形式

to_number()

定义 long long to_number(std::string x)

将字符串转为数字形式

cout<<to_string(114514);   //"114514"
cout<<to_number("1919810");  //1919810

to_bit()

定义 std::string to_bit(T x)

将数字转为字符串形式的二进制

将字符串转为字符串形式的二进制详见 (bitset.h) hdk::bitset

cout<<to_bit(4); //"100"

fixed_size()

定义 std::string fixed_size(std::string x,int size,char fillchar='0')

将字符串高位补齐为固定位数并返回

size 补齐到的位数

fillchar 填充字符

__int128 适配函数部分

floor_sqrt()

定义 T floor_sqrt(T x,T l=1,T r=-1)

对给定的 \(x\) 开根后向下取整

在不限制后两个参数的情况下,复杂度为 \(\log x\)

基于二分答案实现,你可以通过传入第二个和第三个参数来限定二分答案的上界或下界,复杂度也会随之改变

__int128 x=12;
cout<<(long long)floor_sqrt(x);     //3
cout<<(long long)floor_sqrt(x,(__int128)3,(__int128)5); //3

print()

定义 void print(T x,bool first=true)

输出数字,复杂度为 \(\log_{10} x\)

将 first 改为 false 可以让 x=0 时不输出

__int128 x=12;
print(x);

文件处理部分

copyfile()

定义 bool copyfile(const char*in,const char *out)

将 in 文件复制到 out

复制成功将会返回 true

printfile()

定义 bool printfile(const char*in)

将 in 文件输出到 stdout

输出成功将会返回 true

fc()

定义 fc(const char *file_A,const char *file_B,bool display=false,bool debug_mode=false)

比较文本,不相同则返回 true

display 显示比较结果

debug_mode 显示详细比较信息

file_name()

定义 string file_name(const string file)

去除 file 的后缀名并返回

cout<<filename("cth.txt");  //cth
cout<<filename("cth");  //cth

时间函数

时间函数都定义在 class _time 中,如需使用请调用定义

_time::sleep(clocks)

相当于 Sleep(clocks)

_time::record_time()

定义(一) long long record_time()

第一次调用记录当前时间,第二次调用返回距离上次调用的时刻差,并重置

定义(二) _time::record_time(bool is_start)

is_start=true 记录当前时间,并覆盖之前记录的时间

is_start=false 返回与记录时间的时间差

predefined

定义:time_ms / time_s,可以当单位使用

_time s;
cout<<s.record_time(); //0
s.sleep(1 time_s);  //休眠一秒
s.sleep(2000 time_ms);  //休眠 2000 毫秒
cout<<s.record_time()/clocks_per_sec; //3
cout<<s.record_time();  //0
posted @ 2024-11-03 17:27  HaneDaniko  阅读(29)  评论(0编辑  收藏  举报