码迷,mamicode.com
首页 > 其他好文 > 详细

顺序串的实现

时间:2014-11-23 23:30:25      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:数据结构      顺序串   

顺序串数据结构如下:

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


顺序串的实现

标签:数据结构      顺序串   

原文地址:http://blog.csdn.net/whu_sky/article/details/41420293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!