标签:替换 struct type src clu nbsp 顺序表 return int
#include<iostream> using namespace std; typedef struct{ char data[100]; int length; } SqString; //串赋值 void assign(SqString &s,char a[]){ int i=0; while(a[i]!=‘\0‘){ s.data[i]=a[i]; i++; } s.length=i; } //串复制 void strcpy(SqString &s,SqString t){ for(int i=0;i<t.length;i++){ s.data[i]=t.data[i]; } s.length=t.length; } //求串长 int getLength(SqString s){ return s.length; } //判断串相等 int isEquel(SqString s,SqString t){ if(s.length!=t.length){ return 0; }else{ for(int i=0;i<s.length;i++){ if(s.data[i]!=t.data[i]){ return 0; } } return 1; } } //串连接 SqString concat(SqString s,SqString t){ SqString rst; for(int i=0;i<s.length;i++){ rst.data[i]=s.data[i]; } for(int j=0;j<t.length;j++){ rst.data[j+s.length]=t.data[j]; } rst.length=s.length+t.length; return rst; } //求子串 SqString getSon(SqString &s,int i,int l){ SqString rst; if(i<1||l<1||l>s.length||i+l-1>s.length){ rst.length=0; }else{ for(int j=i-1;j<i+l-1;j++){ rst.data[j-i+1]=s.data[j]; } rst.length=l; } return rst; } //查找定位位置 int index(SqString s,SqString t){ int i=0; int j=0; while(i<s.length&&j<t.length){ if(s.data[i]==t.data[j]){ i++; j++; }else{ i=i-j+1; j=0; } } //此处返回的逻辑位置有点难理解 if(j>=t.length){ return i-t.length+1;//返回子串的实际开始位置 i-t.length得到逻辑开始位置 }else{ return 0; } } //子串插入 /* 思路: 先将第i个位置开始的元素后移动t.length个位置 再将t的值插入 */ int insStr(SqString &s,SqString t,int i){ for(int j=s.length-1;j>=i-1;j--){ s.data[j+t.length]=s.data[j];//注意是空出t.length个位置 } for(int j=0;j<t.length;j++){ s.data[i-1+j]=t.data[j]; } s.length=s.length+t.length; } //子串删除 /* 从第i-1个位置开始删除l个元素 应该将i+l-1开始的元素向前移动l个位置 直到到末尾 */ int delStr(SqString &s,int i,int l){ if(i<1||l<1||l>s.length||i+l-1>s.length){ return 0; }else{ for(int j=i+l-1;j<s.length;j++){ s.data[j-l]=s.data[j]; } s.length=s.length-l; return 1; } } //显示 void disStr(SqString s){ cout<<endl; for(int i=0;i<s.length;i++){ cout<<s.data[i]<<" "; } cout<<endl; } //子串替换 void replaceStr(SqString &s,SqString t,SqString r){ int i = index(s,t);//获取位置 while(i!=0){ delStr(s,i,t.length); insStr(s,r,i); disStr(s); i = index(s,t); } } int main(){ /* 字符串的基本运算 串赋值 assign 串复制 strcpy 求串长 getLength 判断串相等 isEquel 串连接 concat 求子串 getSon 查找定位位置 index 子串插入 insStr 子串删除 delStr 子串替换 replaceStr 输出串 disStr */ SqString s,s2,rst,r; char a[]="world",b[]="helloworldsdfworld",c[]="l"; assign(s,a); assign(r,c); assign(s2,b); cout<<"s2长度"<<getLength(s2)<<endl; disStr(s2); strcpy(rst,s); disStr(rst); disStr(concat(s2,s)); disStr(s); if(isEquel(s,s2)){ cout<<"相等"; }else{ cout<<"不相等"; } delStr(s,4,3); disStr(s2); disStr(s); disStr(r); replaceStr(s2,s,r); disStr(s2); assign(s,a); assign(r,c); assign(s2,b); cout<<"s的长度"<<getLength(s)<<"如下"<<endl; disStr(s); cout<<"r的长度"<<getLength(r)<<"如下"<<endl; disStr(r); cout<<"s2的长度"<<getLength(s2)<<"如下"<<endl; disStr(s2); cout<<index(s2,s); replaceStr(s2,s,r); disStr(s2); return 0; }
结果:
标签:替换 struct type src clu nbsp 顺序表 return int
原文地址:https://www.cnblogs.com/webcyh/p/11393578.html