📄 asd.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 + -