#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. c++ 快速复习第一部份

    去年有事无事学过一c++ ,,由于工作用不上,学来没有用,所以学得乱七八的,最近需要复习一下,因为最近想学习一下硬 件相关 第一   引用头文件和自定义头 #include <iostream& ...

  2. SpringBoot全局异常处理及自定义异常

    首先定义自定义返回类,如果自己项目中已经有了自定义返回类只需要将后面的代码做相应的修改即可: import io.swagger.annotations.ApiModelProperty; impor ...

  3. 5、SpringBoot2之整合Durid

    创建名为springboot_druid的新module,过程参考3.1节 5.1.引入相关依赖 注意:虽然本文使用的是 spring boot 2.7.18 和 MySQL 5.7 ,但是出于可移植 ...

  4. 【Hessian】轻量级分布式通信组件

    参考自简书 https://www.jianshu.com/p/9136aa36cffb 案例场景为单向通信 A 和 B两个应用服务, B需要调用A的接口完成业务需求 那么A服务角色就是服务端,提供给 ...

  5. 【SQL】 Excel 批量编写SQL脚本

    参考地址: https://zhuanlan.zhihu.com/p/134290191 有两种办法: 第一种,使用 & 拼接符号处理 ="INSERT INTO `my-info` ...

  6. 【perl】01

    1.环境搭建 -- 解释器 / 编译器 Perl 在 Window 平台上有 ActiveStatePerl 和 Strawberry Perl 编译器. ActiveState Perl和 Stra ...

  7. 【OracleDB】 06 多表查询

    多表查询的目的: 从两张以上的数据表中查询每张表的字段 笛卡尔集的问题: 查询职员表一共107条记录 select count(employee_id) from employees; 查询部门表,一 ...

  8. 中国版的huggingface——始智AI-wisemodel

    新闻: 始智AI-wisemodel社区正式上线,目标打造中国版"HuggingFace" 首先要知道,AI火热了7,8年了,不论是国内还是国外一直有要搞模型分享的网站,但是这东西 ...

  9. 如果一个windows主机上插两个蓝牙适配器会如何???——由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)——windows主机蓝牙适配器驱动错误排查

    事情是这样的,在某鱼上挂了一个蓝牙适配器,是自己多年前买的,给自己的老电脑用的,那一台老电脑主板上没有自带蓝牙,于是就在某东上买了一个蓝牙适配器: 但是这几年新买的电脑都自带蓝牙,于是准备把这个适配器 ...

  10. 前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

    这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路. 至少有 2 位小伙伴积极反馈,发现本示例有明显的性能问题,一是内存溢出问题,二是卡顿的问题,在这里感谢大家的提 ...