首页 > 代码库 > 顺序串的实现

顺序串的实现

顺序串数据结构如下:

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);
}


顺序串的实现