#include<bits/stdc++.h>
using namespace std;
namespace hdk{
const int siz=100001;
class string{
private:
char s[siz];
int lengtht=0;
int start=0;
public:
void operator =(const std::string x){
memset(s,0,sizeof s);
for(int i=0;i<=x.length()-1;++i){
s[i]=x[i];
}
lengtht=x.length();
}
void operator =(const string x){
memset(s,0,sizeof s);
for(int i=0;i<=x.start+x.lengtht-1;++i){
s[i]=x.s[i];
}
start=x.start;
lengtht=x.lengtht;
}
inline int length(){
return lengtht;
}
void check_start(){
for(int i=0;i<=siz;++i){
if(s[i]){
start=i;
break;
}
}
}
void print(char ending=0){
std::cout<<s+start;
if(ending!=0) std::cout<<ending;
}
void input(int start_pos=0){
std::cin>>s+start_pos;
start=start_pos;
lengtht=strlen(s+start_pos);
}
inline void push_back(char x){
s[start+lengtht]=x;
lengtht++;
}
string operator +(char x){
string ans=*this;
ans.push_back(x);
return ans;
}
string operator +(string &x){
string ans=*this;
for(int i=x.start;i<=x.start+x.length()-1;++i){
ans.push_back(x.s[i]);
}
return ans;
}
void operator +=(string &x){
*this=*this+x;
}
void operator +=(char x){
push_back(x);
}
char* begin(){
return &s[start];
}
char* end(){
return &s[start+lengtht];
}
char operator[](int x){
return s[x];
}
string substr(int substart,int sublength=siz){
string ans;
for(int i=start+substart;i<=start+substart+sublength-1;++i){
if(i>=start+lengtht) break;
ans.push_back(s[i]);
}
return ans;
}
string operator *(int x){
string ans;
while(x--) ans+=*this;
return ans;
}
void operator *=(int x){
*this=(*this)*x;
}
unsigned long long hash(int l,int r,int num=233,unsigned long long mod=0){
unsigned long long ans=0;
for(int i=l;i<=r;++i){
ans=ans*num+s[i];
if(mod) ans%=mod;
}
return ans;
}
unsigned long long hashall(int num=233,unsigned long long mod=0){
unsigned long long ans=0;
for(int i=start;i<=start+lengtht-1;++i){
ans=ans*num+s[i];
if(mod) ans%=mod;
}
return ans;
}
inline bool empty(){
if(s[start]) return false;
return true;
}
inline void pop_back(){
if(!empty()){
s[start+lengtht-1]=0;
lengtht--;
}
}
inline void clear(){
memset(s,0,sizeof s);
start=0;
lengtht=0;
}
string reverse(string x){
string ans;
for(int i=x.start+x.length()-1;i>=x.start;--i){
ans.push_back(x[i]);
}
return ans;
}
void reverse(){
*this=reverse(*this);
}
friend std::ostream& operator<<(std::ostream& output,string& inx){
inx.print();
return output;
}
friend std::istream& operator>>(std::istream& input,string& inx){
inx.input();
inx.check_start();
return input;
}
bool check_mir(){
int i=start,j=start+lengtht-1;
while(i<=j){
if(s[i]!=s[j]) return false;
i++;j--;
}
return true;
}
int count(char x){
int ans=0;
for(int i=start;i<=start+lengtht-1;++i){
if(s[i]==x) ans++;
}
return ans;
}
bool operator ==(string x){
if(x.length()!=length()) return false;
for(int i=0;i<=x.length()-1;++i){
if(x[x.start+i]!=s[start+i]) return false;
}
return true;
}
bool operator <(string x){
if(x.length()!=length()){
return x.length()>length();
}
for(int i=0;i<=x.length()-1;++i){
if(x[x.start+i]!=s[start+i]){
return s[start+i]<x[x.start+i];
}
}
return false;
}
bool operator >(string x){
return ((!(*this==x)) and (!(*this<x)));
}
bool operator <=(string x){
return ((*this<x) or (*this==x));
}
bool operator >=(string x){
return ((*this>x) or (*this==x));
}
inline int size(){
return length();
}
inline int start_pos(){
return start;
}
inline void insert(int pos,string x){
for(int i=start+length()-1;i>=start+pos;--i){
s[i+x.length()]=s[i];
}
for(int i=start+pos;i<=start+pos+x.length()-1;++i){
s[i]=x[x.start+i-start-pos];
}
lengtht+=x.lengtht;
}
inline void insert(int pos,std::string x){
for(int i=start+length()-1;i>=start+pos;--i){
s[i+x.length()]=s[i];
}
for(int i=start+pos;i<=start+pos+x.length()-1;++i){
s[i]=x[i-start-pos];
}
lengtht+=x.length();
}
inline void insert(int pos,char x){
for(int i=start+length()-1;i>=start+pos;--i){
s[i+1]=s[i];
}
s[start+pos]=x;
lengtht++;
}
inline void erase(int pos){
for(int i=start+pos;i<=start+length()-2;++i){
s[i]=s[i+1];
}
s[start+length()-1]=0;
lengtht--;
}
inline void erase(int l,int r){
for(int i=start+l;i<=start+length()-1-(r-l+1);++i){
s[i]=s[i+r-l+1];
}
for(int i=start+length()-(r-l+1);i<=start+length()-1;++i){
s[i]=0;
}
lengtht-=(r-l+1);
}
inline bool find(string x){
int ppos=0;
for(int i=start;i<=start+length()-1;++i){
if(s[i]==x[x.start+ppos]){
ppos++;
if(ppos==x.length()){
return true;
}
}
else{
ppos=0;
}
}
return false;
}
inline bool find(std::string x){
int ppos=0;
for(int i=start;i<=start+length()-1;++i){
if(s[i]==x[ppos]){
ppos++;
if(ppos==x.length()){
return true;
}
}
else{
ppos=0;
}
}
return false;
}
void lowercase(){
for(int i=start;i<=start+length()-1;++i){
if(s[i]>='A' and s[i]<='Z'){
s[i]-=('A'-'a');
}
}
}
void lowercase(int l,int r){
for(int i=start+l;i<=start+r;++i){
if(s[i]>='A' and s[i]<='Z'){
s[i]-=('A'-'a');
}
}
}
void uppercase(){
for(int i=start;i<=start+length()-1;++i){
if(s[i]>='a' and s[i]<='z'){
s[i]+=('A'-'a');
}
}
}
void uppercase(int l,int r){
for(int i=start+l;i<=start+r;++i){
if(s[i]>='a' and s[i]<='z'){
s[i]+=('A'-'a');
}
}
}
void map_replace(map<char,char> mp){
for(int i=start;i<=start+length()-1;++i){
if(mp.count(s[i])){
s[i]=mp[s[i]];
}
}
}
void map_replace(map<char,char> mp,int l,int r){
for(int i=start+l;i<=start+r;++i){
if(mp.count(s[i])){
s[i]=mp[s[i]];
}
}
}
};
}
using namespace hdk;

[namespace hdk] string的更多相关文章

  1. 未定义标识符string

    “未定义标识符string”  解决方法: 头文件加上 #include <iostream>using namespace std; string是标准库的,要加std::string, ...

  2. const char* && string && String^ 类型转换

    const char* && string && String^ 类型转换 const char* ---> string const char * cw= &q ...

  3. String类实现

    String类是应用框架中不可或缺的类 重载运算符实现字符串的操作 #idndef IOTECK_STRING_H_#define IOTECK_STRING_H_namespace iotek{ c ...

  4. namespace的用法

    C++中采用的是单一的全局变量命名空间.在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突.当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字:有时为了程序 ...

  5. HDU 1247 Hat’s Words(map,STL,字符处理,string运用)

    题目 用map写超便捷 也可以用字典树来写 我以前是用map的: #include<stdio.h> #include<string.h> #include<algori ...

  6. c++中string类的详解

    ,<时返回-1,==时返回0  string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...

  7. vector、string实现大数加法乘法

    理解 vector 是一个容器,是一个数据集,里边装了很多个元素.与数组最大的不同是 vector 可以动态增长. 用 vector 实现大数运算的关键是,以 string 的方式读入一个大数,然后将 ...

  8. string中c_str()、data()、copy(p,n)函数的用法

    标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str().data().copy(p,n). 1. c_str():生成一个const char*指针,指向以空 ...

  9. ZOJ 1151 Word Reversal反转单词 (string字符串处理)

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 For each list of words, output a l ...

  10. 浅谈string

    #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 using std::string;using ...

随机推荐

  1. 靶机练习: y0usef

    靶机: y0usef 准备工作 靶机地址: https://download.vulnhub.com/y0usef/y0usef.ova MD5 校验:28c5d869b003be94b2d8ab4b ...

  2. Windows下UI自动化工具Inspect

    windows系统下的UI自动化工具Inspect是包含在WindowsSDK包里的,所以需要先下载SDK包,然后在SDK包路径下找到Inspect工具并打开使用就可以了. 官网下载链接:https: ...

  3. 用.Net实现GraphRag:从零开始构建智能知识图谱

    近来,大模型技术日新月异,使得与其相关的研发项目也层出不穷.其中一个备受关注的技术便是RAG(Retrieval Augmented Generation).今天,我要跟大家分享一个出色的项目:Gra ...

  4. Jmeter二次开发函数 - 文本替换

    此篇文章将在Jmeter创建一个新函数,实现替换文本中的指定内容功能.效果图如下 1.eclipse项目创建步骤此处省略,可参考上一篇Jmeter二次开发函数之入门 2.新建class命名为" ...

  5. 【SpringBoot】Re 01 补充学习

    对SpringBoot后续的再补充学习: 使用IDEA创建项目不勾选任何组件 默认的POM结构: <?xml version="1.0" encoding="UTF ...

  6. NVIDIA机器人仿真项目 —— Isaac Gym - Preview Release

    地址: https://developer.nvidia.com/isaac-gym 过期代码库地址:(已不再维护的代码库,现已由isaac gym项目合并到isaac sim项目)(2022年开始停 ...

  7. MindSpore中使用model.train,在每一步训练结束后自动进行调用自定义函数 —— from mindspore.train.callback import Callback

    在MindSpore中使用model.train训练网络时我们难以处理间断性的任务,为此我们可以考虑使用MindSpore中的Callback机制.Callback 函数可以在 model.train ...

  8. spring5的新特性

    1.背景 2.依赖环境的变化 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方 法在代码库中删除 3.自带了通用的日志封装 3.1.日志的简单使用 Spr ...

  9. JS Map对象与map方法

    前言  最近遇到一个遍历的问题,查资料的过程中,发现有个 Map 对象,提供了很多方法可以轻松地获取我们想要的数据,之前只知道有 map ,没想到还有 Map ,是不是有点绕?不急,这两个东西都是虽然 ...

  10. 2023 CCPC 哈尔滨游记

    board zsy 11.3 下了高代课跟教练聊了会,以为差点赶不上飞机了,结果还好.飞机上一直在看<笑傲江湖> 晚上本来想写作业的,还是摆了 拉 zsy 打雀魂,三人麻将到第二天了 11 ...