首页 > 其他分享 >调不出代码怒封了个string用来解气

调不出代码怒封了个string用来解气

时间:2024-07-03 11:46:32浏览次数:12  
标签:return string int pos start 调不出 ans 怒封

#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;

标签:return,string,int,pos,start,调不出,ans,怒封
From: https://www.cnblogs.com/HaneDaCafe/p/18281293

相关文章

  • String.format 日期占位 去除左侧的填充0
    原文链接: https://baijiahao.baidu.com/s?id=1764834107971798887&wfr=spider&for=pc假设我们要输出当前的日期时间,我们可以使用如下代码:Datedate=newDate();System.out.println("输出结果:"+String.format("%tF%tT",date,date));输出结果为:输出结果:2023-......
  • 27-String类
    String字符串是常量,创建之后不可改变字符串字面值存储在字符串池中,可以共享Strings="hello";产生一个对象,字符串池中存储Strings=newString("hello");//产生两个对象,堆、池各存储一个Stringname="hello";//"hello"常量存储在字符常量池中。name在栈......
  • Visual C++ generate uuid via UuidCreate and CoCreateGuid,get time now,write stri
    //ConsoleApplication3.cpp:Thisfilecontainsthe'main'function.Programexecutionbeginsandendsthere.//#pragmacomment(lib,"rpcrt4.lib")#include<windows.h>#include<chrono>#include<ctime>#include&l......
  • 秋招Java后端开发冲刺——基础篇5(String&集合)
    一、StringString类是Java中字符串操作类,位于java.lang包下String类型对象的底层使用字符数组char[]存储字符串,由final修饰且没有提供公共的修改方法,因此String对象是不可变的。常见方法方法名作用trim()去掉字符串首尾空字符split(分隔符/正则表达式)分割字符串substring......
  • Golang:go-querystring将struct编码为URL查询参数的库
    Golang:go-querystring将struct编码为URL查询参数的库原创 吃个大西瓜 CodingBigTree 2024-05-0908:30 北京go-querystringisaGolibraryforencodingstructsintoURLqueryparameters.译文:go-querystring将struct编码为URL查询参数的Golang库文档ht......
  • swift JSONString和字典互转
     extensionDictionary{publicfunctoJSONString()->String?{guardletdata=try?JSONSerialization.data(withJSONObject:self,options:[])else{returnnil}guardletstring=String(data:data,encoding......
  • 【Effective Python教程】(90个有效方法)笔记——第3章:函数——24:用None和docstring来描
    文章目录第3章:函数第24条用None和docstring来描述默认值会变的参数函数默认值的坑(函数的默认参数值只在定义函数时计算)解决方法:将函数默认参数值设为None,然后再在函数体中判断并初始化函数默认参数值设置为None的其他应用示例“函数默认参数值设置为None”与“函数参数......
  • httpClient使用GetStringAsync、GetByteArrayAsync、GetStreamAsync三种方法的使用场
     `HttpClient`类中的`GetStringAsync`、`GetByteArrayAsync`和`GetStreamAsync`方法用于从远程服务器获取不同类型的数据。它们的主要使用场景如下:1.`GetStringAsync`方法:-使用场景:当您需要从远程服务器获取文本数据时,可以使用`GetStringAsync`方法。这通常用于......
  • MyBatis针对String类型的数字<if>标签失效问题
    需求描述:大致场景是订单模块去接受流程模块发送的MQ消息,针对MQ消息发送的是一个实体类,该实体类中有一个String类型的字段,用于判断当前业务状态,1表示审核中2表示已审核等。订单模块根据这个状态去修改自身状态的信息可以看到这里有一个If标签,用于判断这个eventType的值......
  • manim边学边做--SingleStringMathTex
    SingleStringMathTex是Mobjects分类中用来显示数学公式的class。manim中有3个可以用来显示数学公式的class,还有两个是MathTex和Tex,后续再介绍。从SingleStringMathTex的名称中也可以看出,它是用来显示只有一行的简单公式。SingleStringMathTex在manim各个模块中的位置大致如上图中......