栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构——串的基本操作实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构——串的基本操作实现

文章目录
      • 结构体定义
      • 初始化串
      • 给串赋值
      • 求主串的子串
      • 比较两个字符串的值
      • 拼接两个字符串
      • 复制串
      • 清空串
      • 具体实现

结构体定义
typedef char ElemType;

typedef struct{
	ElemType *ch ;
	int length;
}SString; 
初始化串
void InitStr(SString &Str){
	Str.length=0;
	Str.ch=NULL;//S的数据存储指向为空.	
}
给串赋值
bool StrAssign(SString &Str,char *ch){
	if(Str.ch){//如果Str中的数据不为空 
		free(Str.ch);
		Str.ch=NULL;//Str的数据存储指向为空.	
	}
	
	int len=0;
	char *c=ch;//指向传过来的ch数组
	//定位ch的长度,
	while(*c){//解引用 ,当c中的数据不为空 
		len++;
		c++;
	} 
	//当ch数组为空 
	if(len==0){
		cout<<"空串,赋值失败!"<
		Str.ch=(char *)malloc(sizeof(char)*(len+1));
		//cout<<(int)Str.ch[len]<
			cout<<"空间分配失败!"<
			for(int i=0;i<=len;i++){
				Str.ch[i]=ch[i];
			}
		
			Str.length=len;
			return true;
		} 
	}
}
求主串的子串
bool GetSubString(SString &Str,SString &SubStr,int pos,int len ){
	
	if(pos<0||pos>=Str.length||len<0||len>Str.length-pos) {
		cout<<"位置或者长度不合法!"<//如果SubStr中的数据不为空 
		free(SubStr.ch);
		SubStr.ch=NULL;//SubStr的数据存储指向为空.	
	}
	
	if(len==0){
		SubStr.ch=NULL;
		SubStr.length=0;
		cout<<"字串的长度为0"<
		//分配空间 
		SubStr.ch=(char *)malloc(sizeof(char)*(len+1));
		
		int sublen=0;//字串长度 
		for(int i=pos-1,j=0;j//i 
比较两个字符串的值 
int StrCompare(SString S,SString T){
	for(int i=0;i
		if(S.ch[i]!=T.ch[i])
		return S.ch[i]-T.ch[i];
	}
	//如果所有字符都相等,那么长度更长的字符串更大
	return S.length -T.length; 
}
拼接两个字符串
bool Concat(SString &Str,SString &S1,SString &S2){
	if(Str.ch){//如果Str中的数据不为空 
		free(Str.ch);
		Str.ch=NULL;//Str的数据存储指向为空.	
	}
	
	Str.ch=(char *)malloc(sizeof(char)*(S1.length+S2.length+1));
	if(Str.ch==NULL){
		cout<<"空间分配失败!"<
		int i=0,j=0;
		//将子串1的内容写入Str中 
		for(;i
			Str.ch[i]=S1.ch[i];
		}
		//将子串2的内容写入Str中 
		for(;j
			Str.ch[i+j]=S2.ch[j];
		}
		Str.ch[i+j]='';
		Str.length=S1.length+S2.length;
		return true;
	}
}
复制串
bool  StrCopy(SString &Str,SString &T){
	T.ch=(char *)malloc(sizeof(char)*(Str.length+1));
	
	//cout<
		T.ch[i]=Str.ch[i];
	}
	T.ch[Str.length]=''	;
	T.length=Str.length;
	return true;
} 
清空串
bool ClearStr(SString &Str){
	if(Str.ch){//如果Str中的数据不为空 
		free(Str.ch);
		Str.ch=NULL;//Str的数据存储指向为空.	
	}
	Str.length=0;
	return true;
}

具体实现
#include 
#include 
using namespace std;

typedef char ElemType;

typedef struct{
	ElemType *ch ;
	int length;
}SString; 


void InitStr(SString &Str){
	Str.length=0;
	Str.ch=NULL;//S的数据存储指向为空.	
}


bool StrAssign(SString &Str,char *ch){
	if(Str.ch){//如果Str中的数据不为空 
		free(Str.ch);
		Str.ch=NULL;//Str的数据存储指向为空.	
	}
	
	int len=0;
	char *c=ch;//指向传过来的ch数组
	//定位ch的长度,
	while(*c){//解引用 ,当c中的数据不为空 
		len++;
		c++;
	} 
	//当ch数组为空 
	if(len==0){
		cout<<"空串,赋值失败!"<
		Str.ch=(char *)malloc(sizeof(char)*(len+1));
		//cout<<(int)Str.ch[len]<
			cout<<"空间分配失败!"<
			for(int i=0;i<=len;i++){
				Str.ch[i]=ch[i];
			}
			Str.ch[len+1]='';
			Str.length=len;
			return true;
		} 
	}
}


bool GetSubString(SString &Str,SString &SubStr,int pos,int len ){
	
	if(pos<0||pos>=Str.length||len<0||len>Str.length-pos) {
		cout<<"位置或者长度不合法!"<//如果SubStr中的数据不为空 
		free(SubStr.ch);
		SubStr.ch=NULL;//SubStr的数据存储指向为空.	
	}
	
	if(len==0){
		SubStr.ch=NULL;
		SubStr.length=0;
		cout<<"字串的长度为0"<
		//分配空间 
		SubStr.ch=(char *)malloc(sizeof(char)*(len+1));
		
		int sublen=0;//字串长度 
		for(int i=pos-1,j=0;j//i
	if(Str.ch){//如果Str中的数据不为空 
		free(Str.ch);
		Str.ch=NULL;//Str的数据存储指向为空.	
	}
	Str.length=0;
	return true;
}




bool Concat(SString &Str,SString &S1,SString &S2){
	if(Str.ch){//如果Str中的数据不为空 
		free(Str.ch);
		Str.ch=NULL;//Str的数据存储指向为空.	
	}
	
	Str.ch=(char *)malloc(sizeof(char)*(S1.length+S2.length+1));
	if(Str.ch==NULL){
		cout<<"空间分配失败!"<
		int i=0,j=0;
		//将子串1的内容写入Str中 
		for(;i
			Str.ch[i]=S1.ch[i];
		}
		//将子串2的内容写入Str中 
		for(;j
			Str.ch[i+j]=S2.ch[j];
		}
		Str.ch[i+j]='';
		Str.length=S1.length+S2.length;
		return true;
	}
}


int StrCompare(SString S,SString T){
	for(int i=0;i
		if(S.ch[i]!=T.ch[i])
		return S.ch[i]-T.ch[i];
	}
	//如果所有字符都相等,那么长度更长的字符串更大
	return S.length -T.length; 
}


bool  StrCopy(SString &Str,SString &T){
	T.ch=(char *)malloc(sizeof(char)*(Str.length+1));
	
	//cout<
		T.ch[i]=Str.ch[i];
	}
	T.ch[Str.length]=''	;
	T.length=Str.length;
	return true;
} 




int main(){
	SString str,str1,str2,str3,str4,str5,str6;
	InitStr(str);
	InitStr(str1);
	InitStr(str2);
	InitStr(str3);
	InitStr(str4);
	InitStr(str5);
	InitStr(str6);
	char ch1[] = "I am pig!";
    char ch2[] = "You are pig!";
    char ch3[] = "We are pig!";
	
	StrAssign(str1,ch1);
	StrAssign(str2,ch2);
	StrAssign(str3,ch3);
	
	cout<<"字符串1为:"< 

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917524.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号