数据结构与算法:顺序串基本操作

这篇博客通过一个C++程序展示了如何操作顺序串,包括初始化、显示字符串、获取长度、复制、比较、连接、子串提取、查找、插入和删除操作。程序中使用了自定义的SqString类来实现这些基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "iostream"


using namespace std;


#define MaxSize 100
typedef struct{
char data[MaxSize];
int length;
}SqString;


void Assign(SqString &s,char str[]){
int i=0;
while(str[i]!='\0'){
s.data[i]=str[i];
i++;
}
s.length=i;
}


void Destroystr(SqString s){

}


void StrCopy(SqString &s,SqString t){
int i;
for(i=0;i<t.length;i++){
s.data[i]=t.data[i];

}
s.length=t.length;
}


int StrLength(SqString s){
return s.length;

}




int StrEqual(SqString s,SqString t){
int i=0;
if(s.length!=t.length){
return 0;

}
else{
for(i=0;i<s.length;i++){
if(s.data[i]!=t.data[i]){
return 0;
}

}
return 1;
}
}




SqString Concat(SqString s,SqString t){
SqString r;
int i,j;
for(i=0;i<s.length;i++){
r.data[i]=s.data[i];

}
for(j=0;j<t.length;j++){
r.data[s.length+j]=t.data[j];
}
r.length=i+j;
return r;

}




SqString SubStr(SqString s,int i,int j){
SqString t;
int k;
if(i<1||i>s.length||j<1||i+j>s.length+1){
t.length=0;
}else{
for(k=i-1;k<i+j;k++){
t.data[k-i+1]=s.data[k];

}
t.length=j;
}
return t;
}


int Index(SqString s,SqString t){
int i=0,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;
}
else{
return 0;
}
}


int InsStr(SqString &s,int i,SqString t){
int j;
if(i<1||i>s.length+1){
return 0;
}else{
for(j=s.length-1;j>=i-1;j--){
s.data[j+t.length]=s.data[j];

}
for(j=0;j<t.length;j++){
s.data[i+j-1]=t.data[j];

}
s.length=s.length+t.length;
return 1;
}
}


int DelStr(SqString &s,int i,int j){
int k;
if(i<1||i>s.length||j<1||i+j>s.length+1){
return 0;
}
else{
for(k=i+j-1;k<s.length;k++){
s.data[k-j]=s.data[k];
}
s.length=s.length-j;
return 1;
}
}




SqString RepStrAll(SqString s,SqString s1,SqString s2){
int i;
i=Index(s,s1);
while(i>0){
DelStr(s,i,s1.length);
InsStr(s,i,s2);
i=Index(s,s1);
}
return s;
}




void DispStr(SqString s){
int i;
for(i=0;i<s.length;i++){
cout<< s.data[i];

}
cout<"\n";

}



以上是头文件


#include <iostream>
#include "SqString.h"


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char** argv) {
SqString s1,s2,s3,s4,s5,s6;
Assign(s1,"abcdefghijk");
cout<<"s1";DispStr(s1);
cout<<StrLength(s1)<<"\n";
StrCopy(s2,s1);
cout<<"s2";
DispStr(s2);
cout << StrEqual(s1,s2);
Concat(s1,s2);
DispStr(s1);cout<<"\n";
SubStr(s1,2,3);
DispStr(s1);cout<<"\n";
Index(s1,s2);
DispStr(s1);cout<<"\n";
InsStr(s1,1,s2);
DispStr(s1);cout<<"\n";
DelStr(s1,1,2);
DispStr(s1);cout<<"\n";
RepStrAll(s1,s2,s3);
DispStr(s1);cout<<"\n";
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值