串的基本操作(数据结构)

串的基本操作

#include 
#include 
#include 
#define MaxSize 255

typedef struct{
	char ch[MaxSize];
	int length;
}SString;

//初始化
SString InitStr(SString &S){
	S.length=0;
	return S;
} 


//为了方便计算,串的下标从1开始计算 
//给串赋值 
SString SetStr(SString &S){
	char c;
	int i=1;
	scanf("%c",&c);
	while(c!='\n'){
		S.ch[i++]=c;
		S.length++;
		scanf("%c",&c);
	}
	return S;
} 

//返回字符串的长度
int StrLength(SString &S){
	return S.length;
} 

//清空字符串 
void ClearStrinf(SString &S){
	S.length=0;
}

//求字符串的字串
bool SubString(SString &Sub,SString &S,int pos,int len){
	if(pos+len-1>S.length) return false;//字串超出范围
	for(int i=pos;i<pos+len;i++){
		Sub.ch[i-pos+1] = S.ch[i];
	} 
	Sub.length = len;
	return true;
} 

//比较字符串
bool StrCompare(SString &S,SString &T){
	for(int i=1;i<=S.length && i<=T.length;i++){
		if(S.ch[i]!=T.ch[i])//进行字符比较 
			return S.ch[i]-T.ch[i];// S>T:>0,S
	}
	return S.length-T.length;//所有字符都相同,长度大的串更大 
} 

//定位操作
int Index(SString &S,SString &T){
	int i=0;
	int n=StrLength(S);
	int m=StrLength(T);
	SString Sub;//暂时存字串 
	while(i<=n-m+1){
		SubString(Sub,S,i,m);
		if(StrCompare(Sub,T)!=0) i++;
		else return i;//返回字串在主串的位置 
	}
	return 0;//不存在与T匹配的字串 
}

//显示串 
void ShowString(SString &S){
	for(int i=1;i<S.length;i++){
		printf("%c",S.ch[i]);
	}
	printf("\n");
}

int main(){
	printf("设置串:");
	SString S;
	InitStr(S);
	SetStr(S);
	int len1;
	len1=StrLength(S);
	printf("串长度为:%d\n",len1);
	printf("设置字串:");
	SString D;
	InitStr(D);
	SetStr(D);
	int len2;
	len2=StrLength(D);
	printf("子串长度为:%d\n",len2);
	
	
	printf("\n");
	printf("-----------求字符串的字串-------------\n");
	SString Sub;
	int pos,len;
	printf("输入截取的起始位置和长度:");
	scanf("%d,%d",&pos,&len);
	if(SubString(Sub,S,pos,len)) {
		printf("截取后的字串\n");
		ShowString(Sub);
	}
	else printf("截取失败\n");
	
	printf("\n");
	printf("-------------定位字串-------------\n");
	int i;
	i=Index(S,D);
	if(i) printf("字串定位:%d",i);
	else printf("字串定位失败\n");
	return 0;
}

展示

串的基本操作(数据结构)_第1张图片

你可能感兴趣的:(数据结构,c语言)