HeaderFile 2.0 | tool.h
也可以探索一下其他头文件!
写的比较好的头文件:
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