⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asd.cpp

📁 以上一共五个在VC环境下编写的程序
💻 CPP
字号:
#include<iostream>
#include<malloc.h>
#define MAXSTRLEN 10
using namespace std;
typedef struct {
    char  * ch;
	int length;
}hstring;

int ifequ()               //判定串是否相等        
{int i,m,n;
 hstring s,t;
 cout<<endl;
 cout<<"---执行串是否相等的操作---"<<endl;
 cout<<"请输入串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"请输入与之比较的串t的长度:";
 cin>>n;
 if(n!=m) {cout<<"s串与t串长度不等,s串与t串不相等"<<endl; return -1;}
 t.length=n;
 t.ch=(char *)malloc(t.length *sizeof(char));
 cout<<"请输入串t的内容:";
 for(i=0;i<=t.length-1;i++)
   cin>>t.ch[i];
 cout<<"串初始化成功"<<endl;   //串的初始化

 for(i=0;i<=m-1;i++)
 {if(s.ch[i]!=t.ch[i]){
	 cout<<"串s与串t不相等"<<endl;
	 break;}
 }
 cout<<"---操作完毕---"<<endl<<endl;
}

void concat()     //串的连接操作
{int m,n,i,j;
 hstring s1,s2,t;
 cout<<endl;
 cout<<"---执行串的连接操作---"<<endl;
 cout<<"连接字符串t的最大长度为:"<<MAXSTRLEN<<endl;
 cout<<"请输入字符串s1的长度:";
 cin>>m;
 s1.length=m; 
 s1.ch=(char *)malloc(s1.length *sizeof(char));
 cout<<"请输入串s1的内容:";
 for(i=0;i<=s1.length-1;i++)
   cin>>s1.ch[i];
 cout<<"请输入串s2的长度:";
 cin>>n;
 s2.length=n;
 s2.ch=(char *)malloc(s2.length *sizeof(char));
 cout<<"请输入串s2的内容:";
 for(i=0;i<=s2.length-1;i++) 
   cin>>s2.ch[i];
 cout<<"串初始化成功"<<endl;     //串的初始化

 cout<<"由s1和s2连接而成的t字符串为:";
 if(m+n<=MAXSTRLEN){
	t.ch=(char *)malloc((m+n) *sizeof(char));
	t.length=m+n;
    for(i=0;i<=m-1;i++)       
		 t.ch[i]=s1.ch[i];
    for(j=0;j<=n;j++)
	    t.ch[i+j]=s2.ch[j];}
 else if(m<MAXSTRLEN){
    t.ch=(char *)malloc(MAXSTRLEN *sizeof(char));
	t.length=MAXSTRLEN;
    for(i=0;i<=m-1;i++)       
		t.ch[i]=s1.ch[i];
	for(j=0;j<=MAXSTRLEN-m-1;j++)
        t.ch[i+j]=s2.ch[j];
	}
 else{t.ch=(char *)malloc(MAXSTRLEN *sizeof(char));
      t.length=MAXSTRLEN;
      for(i=0;i<=MAXSTRLEN-1;i++)      
		  t.ch[i]=s1.ch[i];        //注意字符串的起始位置和执行次数
 }
 for(i=0;i<=t.length-1;i++)
	 cout<<t.ch[i]<<" ";
 cout<<endl;
 cout<<"---操作完毕---"<<endl<<endl;
}

void copy()                //串的复制
{int i,m;
 hstring s,t;
 cout<<endl;
 cout<<"---执行串的复制操作---"<<endl;
 cout<<"请输入串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"主串初始化成功"<<endl;
 cout<<"复制串t为:";
 t.ch=(char *)malloc(s.length *sizeof(char));
 for(i=0;i<=s.length-1;i++)
 {t.ch[i]=s.ch[i];
  cout<<t.ch[i]<<" ";
 }
 cout<<endl;
 cout<<"---操作完毕---"<<endl<<endl;
}

int substr()               //求子串        
{int i,j,p,m,n;
 hstring s,t;
 cout<<endl;
 cout<<"---执行求子串的操作---"<<endl;
 cout<<"请输入主串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"主串初始化成功"<<endl;

 cout<<"请输入子串t第一个字符在主串s中的位置:";
 cin>>p;
 if(p<1||p>s.length+1){cout<<"插入位置不合理"<<endl; return -1;}
 cout<<"请输入子串t的长度:";
 cin>>n;
 if(n>s.length-p+1){cout<<"在主串中该位置不存在相应长度的子串"<<endl;
                    cout<<"---操作完毕---"<<endl<<endl;
                    return 0;}  
 else {cout<<"子串t的输出为:";
	   t.ch=(char *)malloc(n *sizeof(char));
	   for(j=0;j<=n-1;j++){
		   t.ch[j]=s.ch[p-1+j];
		   cout<<t.ch[j]<<" ";}
 }    
 cout<<endl;
 cout<<"---操作完毕---"<<endl<<endl;
}

int insert()               //子串的插入
{int i,m,n,p;
 hstring s,t;
 cout<<endl;
 cout<<"---执行串的插入操作---"<<endl;
 cout<<"请输入串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"请输入串t的长度:";
 cin>>n;
 t.length=n;
 t.ch=(char *)malloc(t.length *sizeof(char));
 cout<<"请输入串t的内容:";
 for(i=0;i<=t.length-1;i++)
   cin>>t.ch[i];
 cout<<"串初始化成功"<<endl;

 cout<<"请输入串t要插入串s中的位置:";
 cin>>p;
 if(p<1||p>s.length+1){cout<<"插入位置不合理"<<endl; return -1;}
 if(t.length){
	 if(!(s.ch=(char *)realloc(s.ch,(s.length+t.length)* sizeof(char))))
	 {cout<<"串溢出"<<endl; return -1;}
	 for(i=s.length-1;i>=p-1;--i)
		 s.ch[i+t.length]=s.ch[i];
 }
 for(i=0;i<=n-1;i++)
     s.ch[p-1+i]=t.ch[i];
 s.length+=t.length;
 cout<<"插入子串成功"<<endl;
 cout<<"新的串s输出为:";
 for(i=0;i<=s.length-1;i++)
	 cout<<s.ch[i]<<" ";
 cout<<endl;
 cout<<"---操作完毕---"<<endl;
 cout<<endl;
}
 

int locate()               //子串的查找和定位        
{int i,j,k,p=0,m,n,r=1;
 hstring s,t;
 cout<<endl;
 cout<<"---执行子串的定位操作---"<<endl;
 cout<<"请输入主串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"请输入要查找的子串t的长度:";
 cin>>n;
 if(n>m) {cout<<"子串长度过长!"<<endl; return -1;}
 t.length=n;
 t.ch=(char *)malloc(t.length *sizeof(char));
 cout<<"请输入串t的内容:";
 for(i=0;i<=t.length-1;i++)
   cin>>t.ch[i];
 cout<<"串初始化成功"<<endl;   //串的初始化

 for(i=0;i<=s.length-t.length;i++)        //要特别注意i和k的终止范围
 {for(j=i,k=0;k<=t.length-1&&s.ch[j]==t.ch[k];j++,k++)
 {if(k==t.length-1){
	p++;
    cout<<"子串t在主串s中第"<<r<<"次出现的位置为s串中第"<<i+1<<"个字符"<<endl;
	r++;
    break;}
 }
 }
 if(p==0)cout<<"主串s中不存在子串t,无法完成定位操作!"<<endl;
 cout<<"---操作完毕---"<<endl<<endl;
}


int del()               //子串的删除       
{int i,j,k,p=0,m,n,r;
 hstring s,t;
 cout<<endl;
 cout<<"---执行子串的删除操作---"<<endl;
 cout<<"请输入主串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"请输入要删除的子串t的长度:";
 cin>>n;
 if(n>m) {cout<<"子串长度过长!"<<endl; return -1;}
 t.length=n;
 t.ch=(char *)malloc(t.length *sizeof(char));
 cout<<"请输入串t的内容:";
 for(i=0;i<=t.length-1;i++)
   cin>>t.ch[i];
 cout<<"串初始化成功"<<endl;   //串的初始化

 cout<<"执行从主串s中删除子串t的操作:"<<endl;
 for(i=0;i<=s.length-t.length;i++)        //要特别注意i和k的终止范围
 {for(j=i,k=0;k<=t.length-1&&s.ch[j]==t.ch[k];j++,k++)
 {if(k==t.length-1){
	 for(r=i;r<=s.length-t.length-1;r++)
		 s.ch[r]=s.ch[r+k+1];      //覆盖t子串
	 s.length-=t.length;          //主串s长度减少
     i--;}                                         //特别注意!!!!!!!!!!!!!!!!!!
 }
 }
 if(s.length==0){cout<<"执行删除操作后主串s变为空!"<<endl; return -1;}
 cout<<"执行删除操作后的串s输出为:";
 for(i=0;i<=s.length-1;i++)
	 cout<<s.ch[i]<<" ";
 cout<<endl;
 cout<<"---操作完毕---"<<endl<<endl;
}


int displace()               //串的替换       
{int i,j,k,p=0,m,n,r,l;
 hstring s,t,v;
 cout<<endl;
 cout<<"---执行串的替换操作---"<<endl;
 cout<<"请输入主串s的长度:";
 cin>>m;
 s.length=m;    
 s.ch=(char *)malloc(s.length *sizeof(char));
 cout<<"请输入串s的内容:";              //初始化主串s
 for(i=0;i<=s.length-1;i++) 
   cin>>s.ch[i];
 cout<<"请输入被替换的子串t的长度:";
 cin>>n;
 if(n>m) {cout<<"子串长度过长!"<<endl; return -1;}
 t.length=n;
 t.ch=(char *)malloc(t.length *sizeof(char));
 cout<<"请输入串t的内容:";              //初始化被替换串t
 for(i=0;i<=t.length-1;i++)
   cin>>t.ch[i];
 cout<<"请输入替换串v的长度:";
 cin>>r;
 v.length=r;
 v.ch=(char *)malloc(v.length *sizeof(char));
 cout<<"请输入替换串v的内容:";           //初始化替换串v 
 for(i=0;i<=v.length-1;i++)
	 cin>>v.ch[i];
 cout<<"串初始化成功"<<endl;   //串的初始化

 cout<<"执行用子串v替换主串s中子串t的操作:"<<endl;
 for(i=0;i<=s.length-t.length;i++)        //要特别注意i和k的终止范围
 {for(j=i,k=0;k<=t.length-1&&s.ch[j]==t.ch[k];j++,k++)
  if(k==t.length-1)
  {if(t.length==v.length){
	  for(l=0;l<=v.length-1;l++)
		  s.ch[i+l]=v.ch[l];}
   
   else if(t.length<v.length){
	  if(!(s.ch=(char *)realloc(s.ch,(s.length+v.length-t.length)* sizeof(char))))
	  {cout<<"串溢出"<<endl; return -1;}              //增加存储空间
      for(l=s.length-1;l>=i+t.length;--l)
		  s.ch[l+v.length-t.length]=s.ch[l];   //元素的后移
	  for(l=0;l<=v.length-1;l++)
		  s.ch[i+l]=v.ch[l];
	  s.length=s.length+v.length-t.length;}    //由于存储空间的变化,s的长度需重新赋值
   
   else {for(l=i+t.length;l<=s.length-1;l++)
	       s.ch[l+v.length-t.length]=s.ch[l];   //元素的前移
         for(l=0;l<=v.length-1;l++)
			 s.ch[i+l]=v.ch[l];
         s.length=s.length+v.length-t.length;}
  }
 }
 cout<<"执行替换操作后的主串s的输出为:";   //执行替换操作后主串s的输出
 for(i=0;i<=s.length-1;i++)
 cout<<s.ch[i]<<" ";
 cout<<endl;
 cout<<"---操作完毕---"<<endl;
 cout<<endl;
}

void main()
{int w;
 cout<<endl;
 cout<<"-----------欢迎运行串的基本操作程序------------"<<endl<<endl<<endl;
 cout<<"--------------目录--------------"<<endl<<endl;
 cout<<"  1-----------判定串是否相等"<<endl;
 cout<<"  2-----------串的连接"<<endl;
 cout<<"  3-----------串的复制"<<endl;
 cout<<"  4-----------求子串"<<endl;
 cout<<"  5-----------子串的插入"<<endl;
 cout<<"  6-----------子串的查找和定位 "<<endl;
 cout<<"  7-----------子串的删除  "<<endl;
 cout<<"  8-----------子串替换  "<<endl;
 cout<<"  9-----------退出 "<<endl;
 do
 {
  cout<<"请按键选择:";
  cin>>w;
  switch(w)
  {case 1:ifequ();break;
   case 2:concat();break;
   case 3:copy();break;
   case 4:substr();break;
   case 5:insert();break;
   case 6:locate();break;
   case 7:del();break;
   case 8:displace();break;
 }
 }
	while(w!=9);
   cout<<"    -----------结束任务!-------------"<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -