zoukankan      html  css  js  c++  java
  • 各类典例模板

    各类典例模板

    分数加法(重载加号)

    关于重载加号运算符,如果得到的最后还为一个类,记得返回return 类名(参数1,参数2)

    FS operator+(FS &f)
    
    #include<bits/stdc++.h>
    using namespace std;
    class FS{
    	private:
    		int fz;
    		int fm;
    	public:
    		FS(){}//必须写上无参构造 
    		FS(int fenzi,int fenmu)
    		{
    			fz=fenzi;
    			fm=fenmu;
    		}
    		FS operator+(FS &f)
    		{
    			int fenmu=f.fm*fm;
    			int fenzi=f.fz*fm+f.fm*fz;
    			int a=measure(fenzi,fenmu);//求最大公约数; 
    			fenmu/=a;
    			fenzi/=a;
    			if(fenmu<0)
    			{
    				fenzi=-fenzi;
    				fenmu=-fenmu;//如果结果为负数,那么分子取负数,分母取正数 
    			}
    			return FS(fenzi,fenmu);
    		}
    		int measure(int x,int y)
    		{
    			int z=y;
    			while(x%y!=0)
    			{
    				z=x%y;
    				x=y;
    				y=z;
    			}
    			return z;
    		}
    		void display()
    		{
    			cout<<fz<<"z"<<fm<<"m"<<endl;
    		}
    };
    int main()
    {
    	int n;
    	cin>>n;
    	while(n--)
    	{
    		int a1,a2,b1,b2;
    		char c1,c2;
    		cin>>a1>>c1>>b1>>c2;
    		cin>>a2>>c1>>b2>>c2;
    		FS f1(a1,b1);
    		FS f2(a2,b2);
    		FS f3=f1+f2;
    		f3.display();
    	}
    }
    
    //1.成员函数重载+号
    	Person operator+(Person &p)
    	{
    		Person temp;
    		temp.m_A=this->m_A+p.m_A;
    		temp.m_B=this->m_B+p.m_B;
    		return temp; 
    	} 
    
    //2.全局函数重载+号	
    Person operator+(Person &p1,Person &p2)
    	{
    		Person temp;
    		temp.m_A=p1.m_A+p2.m_A;
    		temp.m_B=p1.m_B+p2.m_B;
    		return temp; 
    	} 
    

    重载<< >>

    friend ostream& operator<<(ostream& os,Complex& a)  //重载<<运算符
        {
            os<<a.real<<' '<<a.imag<<'i';
            return os;
        }
        
    friend istream& operator>>(istream& in,Complex& a)
        {
        	in>>a.real>>a.imag;
        	return in;
    	}
    

    重载递增运算符

    //重载前置++运算符 返回引用是为了对一个数据一直做递增操作 
    //前置递增返回的是引用 
    MyInteger& operator++()
    {
    	//先进行++运算 
    	m_Num++;
    	//再将自身做返回 
    	return *this;
    }
    //重载后置++运算符 
    //int代表占位参数,可以用于区分前置和后置 
    //后置递增返回的是值 
    MyInteger operator++(int)//后置运算符要记得用int做一个占位符
    {
    	//先 记录当前结果 
    	MyInteger temp=*this;
    	//后 递增 
    	m_Num++;
    	//最后将记录的结果做返回操作 
    	return temp;
    		}
    

    求最大公约数的方法

    int measure(int x,int y)
    		{
    			int z=y;
    			while(x%y!=0)
    			{
    				z=x%y;
    				x=y;
    				y=z;
    			}
    			return z;
    		}
    

    比较复数的模(重载大于号)

    大于号的重载主要是判断true or false,所以用bool

    bool operator >(FS &p)
    
    #include<bits/stdc++.h>
    using namespace std;
    class FS{
    	private:
    		int real;
    		int image;
    	public:
    		FS(){}
    		FS(int r,int i)
    		{
    			real=r;
    			image=i;
    		} 
    		bool operator >(FS &p)
    		{
    			int sum1=real*real+image*image;
    			int sum2=p.real*p.real+p.image*p.image;
    			if(sum1>sum2)
    				return true;
    			else
    				return false;
    		}
    };
    int main()
    {
    	int r1,i1,r2,i2;
    	while(1)
    	{
    		cin>>r1>>i1>>r2>>i2;
    		if(r1==0&&i1==0&&r2==0&&i2==0)	break;
    		FS p1(r1,i1);
    		FS p2(r2,i2);
    		if(p1>p2)
    			cout<<"true"<<endl;
    		else
    			cout<<"false"<<endl;
    	}
    }
    

    复数相加 有空再看

    #include<iostream>
    using namespace std;
    class Complex{
        private:
        int real;
        int image;
        public:
        Complex(int a=0,int b=0):real(a),image(b){};
        void display();       //输出使用函数
        void get(int ,int );       //设置私有成员大小
        friend Complex operator+(const Complex &c1,const Complex &c2);   //重载+运算符
    };
    Complex operator+(const Complex &c1,const Complex &c2){
     Complex c3;
     c3.real=(c1.real+c2.real);           //重载+实现
     c3.image=(c1.image+c2.image);
     return c3;
    }
    void Complex::get(int a,int b){
        real=a;                            //设置大小
        image=b;
    }
    void Complex::display(){       //输出函数
        if(real!=0&&image>0){
         if(image!=1){
                 cout<<real<<"+"<<image<<"i"<<endl;
      }else{                                           //注意虚数是1或者-1的时候不能直接输出虚数
        cout<<real<<"+"<<"i"<<endl;
      }
        }else if(real!=0&&image<0){
         if(image!=-1){
           cout<<real<<image<<"i"<<endl;
      }else{
       cout<<real<<"-i"<<endl;
      }
        }else if(real!=0&&image==0){
            cout<<real<<endl;
        }else if(real==0&&image==0){
            cout<<"0"<<endl;
        }else if(real==0&&image>0){
         if(image!=1){
          cout<<image<<"i"<<endl;
      }else{
       cout<<"i"<<endl;
      }
        }else if(real==0&&image<0){
         if(image!=-1){
          cout<<image<<"i"<<endl;
      }else{
       cout<<"-i"<<endl;
      }
        }
    }
    void getnumber(string s,int &a,int &b){     //难点,输入字符串,a,b,来返回具体实数虚数的大小
        int i,j,k;
        a=0;
        b=0;
        int count1=0,count2=0;
        int flag1=0,flag2=0;   
        for(i=0;i<s.size();i++){
            if(s[i]=='i'){
                flag2=1;    //flag2代表i出现出现个数
            }
        }
        for(i=0;i<s.size();i++){
            if(s[i]=='+'){
                count1++;      //count1,count2记录+-个数
            }
            if(s[i]=='-'){
                count2++;
            }
        }
        if(count2==2){
            int flag=0;
            for(i=1;i<s.size();i++){
                if(s[i]=='-'){
                    i++;
                    break;
                }
                a=(s[i]-'0')+a*10;
            }
            for(;i<s.size();i++){       //负实负虚 
                if(s[i]=='i'){
                    break;
                }
                b=(s[i]-'0')+b*10;
                flag++;
            }
            a=-a;
            if(flag==0){
                b=1;
            }
            b=-b;
        }else if(count1==0&&count2==0){
         a=0;
            b=0;
            int flag=0;
            if(flag2==0){
             for(i=0;i<s.size();i++){  //纯正实数 
                a=(s[i]-'0')+a*10;
            }
      }else if(flag2==1){
       for(i=0;i<s.size()-1;i++){
        b=(s[i]-'0')+b*10;       //纯正虚数 
        flag++;
       }
       if(flag==0){
        b=1;
       }
      }
            
        }else if(count1==1&&count2==0){
         a=0;
         b=0;
         int flag=0;
            for(i=0;i<s.size();i++){
                if(s[i]=='+'){                //正实正虚 
                    i++;
                    break;
                }
                a=(s[i]-'0')+a*10;
            }
            for(;i<s.size();i++){
                if(s[i]=='i'){
                    break;
                }
                b=(s[i]-'0')+b*10;
                flag++;
            }
            if(flag==0){
             b=1;
      }
     
        }else if(count1==0&&count2==1){
         a=0;
         b=0;
         int flag=0;
         if(flag2==1){
          if(s[0]=='-'){
           for(i=1;i<s.size()-1;i++){
            b=(s[i]-'0')+b*10;
            flag++;                   //纯负虚数 
        }
        if(flag==0){
         b=1;
        }
        b=-b;
       }else{
      for(i=0;i<s.size();i++){
                if(s[i]=='-'){
                    i++;
                    break;                       //正实负虚 
                }
                a=(s[i]-'0')+a*10;
            }
            for(;i<s.size()-1;i++){
             flag++;
                b=(s[i]-'0')+b*10;
            }
            if(flag==0){
             b=1;
      }
            b=-b;
          }
     }else{
      a=0;
      b=0;
      for(i=1;i<s.size();i++){         //纯负实数 
       a=(s[i]-'0')+a*10;
      }
      a=-a;
     }    
        }else if(count1==1&&count2==1){
         a=0;
         b=0;
         int flag=0;
         for(i=1;i<s.size();i++){
          if(s[i]=='+'){               //负实正虚 
           i++;
           break;
       }
       a=(s[i]-'0')+a*10; 
      }
      for(;i<s.size()-1;i++){
       flag++;
       b=(s[i]-'0')+b*10;
      }
      a=-a;
      if(flag==0){
       b=1;
      }
     }
    }
    int main(){            //接下来直接调用函数即可,本题判断字符串输入的函数写得不是很好比较复杂
        Complex c1,c2;     //但是思路应该是没有问题,如果自己有更好的方法可以无视本文的方法哈!
        string s1,s2;
        int a=0,b=0,c=0,d=0;
        cin>>s1;
        getnumber(s1,a,b);
        c1.get(a,b);
        while(1){
        cin>>s2;
        if(s2=="0"){
         break;
     }
        getnumber(s2,c,d);
        c2.get(c,d);
        c1=c1+c2;
     }
        c1.display();
        return 0;
    }
    

    复数相乘

    #include<iostream>
    using namespace std;
    class complex
    {
        private:
            int real;
            int imag;
        public:
            void set(int r,int i)
            {
                real=r;
                imag=i;
            }
            friend complex operator *(complex &c1,complex &c2);
            void display();
     
    };
     
    complex operator *(complex &c1,complex &c2)
    {
        int re,im;
        complex c3;
        c3.real=c1.real*c2.real-(c1.imag*c2.imag);
        c3.imag=c1.real*c2.imag+c1.imag*c2.real;
        return c3;
    }
    void complex::display()
    {
        if(imag<0)
        {
            if(imag==-1)
            {           
                if(real==0)
                {
                    cout<<"-i"<<endl;
                }
                else
                {
                    cout<<real<<"-i"<<endl;
                }
     
            }
            
            else
            {
                if(real==0)
                {
                    cout<<imag<<"i"<<endl;
                }
                else
                {
                    cout<<real<<imag<<"i"<<endl;
                }
            }
        }
        
        else if(imag>0)
        {
            if(imag==1)
            {
                if(real==0)
                {
                    cout<<"i"<<endl;
                }
                else
     
                {
                    cout<<real<<"+i"<<endl;
                }
            }
            
            else
            {
                if(real==0)
                {
                    cout<<imag<<"i"<<endl;
                }
                else
                {
                    cout<<real<<"+"<<imag<<"i"<<endl;
                }
            }
     
        }
        
        if(imag==0)
        {
            cout<<real<<endl;
        }
     
    }
     
    int main()
    {
        complex a,b,c;
        string str[3];
        int re[20]= {0},im[20]= {0};
        for(int i=0; i<2; i++)
        {
            int count5=1;
            cin>>str[i];
            int o=0;
            int k=-1;
            
            if(str[i][str[i].size()-1]!='i')
            {
                for(int l=str[i].size()-1; l>=0; l--)
                {
                    re[i]=str[i][l]-'0';
                }
            }
            
            else
            {
                for(int j=0; j<str[i].size(); j++)
                {
     
                    if(str[i][j]=='-')
                    {
                        k=j;
                    }
                    if(str[i][j]=='+')
                    {
                        o=1;
                    }
                }
                
                if(o==0&&k==-1)
                {
                    re[i]=0;
                    
                    if(str[i][str[i].size()-1]==str[i][0])
                    {
                        im[i]=1;
                    }
                    
                    else
                    {
                        for(int l=str[i].size()-2; l>=0; l--)
                        {
                            im[i]+=(str[i][l]-'0')*count5;
                            count5*=10;
                        }
                    }
                    
                }
                
                else if(o==0&&k==0)
                {
                    if(str[i]=="-i")
                    {
                        im[i]=1;
                    }
                    else
                    {
                        for(int l=str[i].size()-2; l>0; l--)
                        {
                            im[i]+=(str[i][l]-'0')*count5;
                            count5*=10;
                        }
                    }
                    im[i]=-1*im[i];
                    
                }
     
                else
                {
                    for(int j=0; j<str[i].size(); j++)
                    {
                        int count1=1;
                        int count2=1;
                        int count3=1;
                        int count4=1;
                        if(str[i][j]=='+')
                        {
                            for(int t=j-1; t>=0; t--)
                            {
                                re[i]+=(str[i][t]-'0')*count1;
                                count1*=10;
                            }
                            if(str[i][j+1]=='i')
                            {
                                im[i]=1;
                            }
                            else
                            {
                                for(int t=str[i].size()-2; t>j; t--)
                                {
                                    im[i]+=(str[i][t]-'0')*count2;
                                    count2*=10;
                                }
                            }
     
                        }
                        if(str[i][j]=='-'&&j!=0)
                        {
                            for(int t=j-1; t>=0; t--)
                            {
                                re[i]+=(str[i][t]-'0')*count3;
                                count3*=10;
                            }
                            if(str[i][j+1]=='i')
                            {
                                im[i]=1;
                            }
                            else
                            {
                                for(int t=str[i].size()-2; t>j; t--)
                                {
                                    im[i]+=(str[i][t]-'0')*count4;
                                    count4*=10;
                                }
                            }
                            im[i]=-1*im[i];
                        }
                        if(str[i][0]=='-')
                        {
                            re[i]=-1*re[i];
                        }
                    }
     
                }
            }
        }
        a.set(re[0],im[0]);
        b.set(re[1],im[1]);
        c=a*b;
        c.display();
        return 0;
    }
    

    矩阵乘法

    //7.7
    #include<iostream>
    #include<iomanip>
    using namespace std;
    class matrix{
    	private:
    		int row;
    		int column;
    		int **mat;
    	public:
    		matrix(){}
    		void read()
    		{
    			for(int i=0;i<row;i++)
    			{
    				for(int j=0;j<column;j++)
    					cin>>mat[i][j];
    			}
    		}
    		matrix(int a,int b)//要先给数组申请内存单元 
    		{
    			row=a;
    			column=b;
    			mat= new int*[row];
    			for(int i=0;i<row;i++)
    			{
    				mat[i]=new int[column];
    				for(int j=0;j<column;j++)
    					mat[i][j]=0;
    			}
    		}
    		void display()
    		{
    			for(int i=0;i<row;i++)
    			{
    				for(int j=0;j<column;j++)
    					cout<<setw(10)<<mat[i][j];
    				cout<<endl;
    			}
    		}
    		matrix operator*(matrix& mt)
    		{
    			if(this->row==1&&this->column==1)
    			{
    				for(int i=0;i<mt.row;i++)
    				{
    					for(int j=0;j<mt.column;j++)
    					{
    						mt.mat[i][j]=this->mat[0][0]*mt.mat[i][j];
    					}
    				}
    				return mt;
    			}
    			else
    			{
    				matrix rs(this->row,mt.column);
    				for(int i=0;i<this->row;i++)
    				{
    					for(int j=0;j<mt.column;j++)
    					{
    						for(int k=0;k<mt.row;k++)
    							rs.mat[i][j]+=this->mat[i][k]*mt.mat[k][j];
    					}
    				}
    			return rs;	
    			}
    			
    		}
    };
    
    int main()
    {
    	int row1,column1,row2,column2;
    	cin>>row1>>column1;
    	matrix p1(row1,column1);
    	p1.read();
    	cin>>row2>>column2;
    	matrix p2(row2,column2);
    	p2.read();
    	if(column1==row2||column1==1&&row1==1||column2==1&&row2==1)
    	{
    		matrix p3=p1*p2;
    		p3.display();	
    	}
    	else
    		cout<<"Invalid Matrix multiplication!"<<endl;
    }
    
    

    说反话

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int n=500005;
    int main()
    {
        char str[n];
        char s[n];
        cin.getline(str,n);
        int length=strlen(str);
        int j;
        int k=0;
        int flag=0;
        for(int i=length-1;i>=0;i--)
        {
            if(str[i]==' '&&str[i+1]!=' '||i==0&&str[i]!=' ')
            { 
    			if(i!=0)
    				j=i+1;
    			else
    				j=i;
                int x=0;
            	while(1)
    			{
    	            if(str[j]!=' '&&j!=length)
    	               {
    						s[k]=str[j];
    						j++;
    						k++;
                            x=1;
    //						if(i!=0)
    //							flag=1;
    					} 
    	            else 
    				{
    					break;
    				}
    			}
            if(x==1)
            {
            s[k]=' ';
    		k++;  
            }
    		continue;
            }
        }
        for(int i=0;i<k-1;i++)
        	cout<<s[i];
        return 0;}
    
  • 相关阅读:
    T-Pot平台Honeytrap蜜罐TCP/UDP服务攻击探测及实现自动化邮件告警
    Linux判断文件是否为空,不为空则打印该文件的大小
    Linux好用的工具命令
    T-Pot平台cowrie蜜罐暴力破解探测及实现自动化邮件告警
    python工具
    python文件的基础操作
    python实现合并两个文件并打印输出
    python打开文件的N种姿势
    python工具
    python列表中元素插入位置总结
  • 原文地址:https://www.cnblogs.com/fzujly/p/14960639.html
Copyright © 2011-2022 走看看