您的位置:首页 > 理论基础 > 数据结构算法

顺序串的实现

2014-11-23 22:26 357 查看
顺序串数据结构如下:

typedef struct{
ElemType data[MaxSize];
int length;
}SqString;

 实现以下函数:

void StrAssign(SqString* &s,char str[]);//给一个顺序串赋值初始化
void StrCopy(SqString* &s,SqString* t); //字符串拷贝
int StrEqual(SqString* s,SqString* t); //两个字符串是否相等
int StrLength(SqString* s); //字符串相等
void Concat(SqString* &s,SqString* t); //字符串连接
SqString SubStr(SqString* s,int i,int j); //求子字符串
SqString InsStr(SqString s1,int i,SqString s2); //插入字符串
SqString DelStr(SqString s,int i,int j); //删除字符串
SqString RepStr(SqString s,int i,int j,SqString t); //替换字符串
void DispStr(SqString *s); //输出字符串

具体实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MaxSize 10000
#define ElemType char
#define GET_ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))

using namespace std;

typedef struct{ ElemType data[MaxSize]; int length; }SqString;

void StrAssign(SqString* &s,char str[]);//给一个顺序串赋值初始化
void StrCopy(SqString* &s,SqString* t); //字符串拷贝
int StrEqual(SqString* s,SqString* t); //两个字符串是否相等
int StrLength(SqString* s); //字符串相等
void Concat(SqString* &s,SqString* t); //字符串连接
SqString SubStr(SqString* s,int i,int j); //求子字符串
SqString InsStr(SqString s1,int i,SqString s2); //插入字符串
SqString DelStr(SqString s,int i,int j); //删除字符串
SqString RepStr(SqString s,int i,int j,SqString t); //替换字符串
void DispStr(SqString *s); //输出字符串

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

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

int StrEqual(SqString s,SqString t){
int flag=0;
if(s.length!=t.length)return flag;
else{
for(int i=0;i<s.length;i++){
if(s.data[i]!=t.data[i]){
flag=1;
break;
}
}
if(flag==0)return 1;
else return 0;
}

}

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

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

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

SqString InsStr(SqString s1,int i,SqString s2){
SqString str;
if(i<=0||i>s1.length+1)return str;
for(int m=0;m<i;m++){
str.data[m]=s1.data[m];
}
for(int l=0;l<s2.length;l++){
str.data[i+l]=s2.data[l];
}
for(int k=0;k<s1.length-i;k++){
str.data[i+s2.length+k]=s1.data[k+i];
}
str.length=s1.length+s2.length;
return str;
}

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

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

int main(){
ElemType a[]={'a','b','c','d','e','f','g','\0'};
ElemType b[]={'h','i','j','k','l','m','n','\0'};
ElemType c[]={'x','y','z','\0'};
SqString s1,s2,s3,s4;
StrAssign(s1,a);
StrAssign(s2,b);
StrAssign(s3,c);
StrCopy(s4,s3);
DispStr(s3);
cout<<StrEqual(s3,s4)<<" "<<StrLength(s1)<<endl;
Concat(s1,s3);
DispStr(s1);
s2=SubStr(s2,2,5);
DispStr(s2);
s2=InsStr(s2,3,s3);
DispStr(s2);
s2=DelStr(s2,1,4);
DispStr(s2);
s1=RepStr(s1,2,2,s2);
DispStr(s1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 顺序串