顺序串的初始化,建立,插入,查找,删除。

//////////////////////////////////////////////

//顺序串的初始化,建立,插入,查找,删除。  //

//Author:Wang Yong				  		    //	

//Date:	2010.8.21				  		    //

//////////////////////////////////////////////



#include <stdio.h>

#include <stdlib.h>



#define MAX 1024



//////////////////////////////////////////////



//定义顺序串的类型  



typedef struct

{

	char ch[MAX];			//存放字符串 

	int len;				//存放串的长度 

} SeqString;



//////////////////////////////////////////////



//创建顺序串



void StrAssign(SeqString &str,char cstr[])

{

	int i;

	for(i = 0 ;cstr[i] != '\0'; i++)

		str.ch[i] = cstr[i];

	str.len = i;

}



//////////////////////////////////////////////



//顺序串的复制



void StrCopy(SeqString &s,SeqString t)

{

	int i;

	for(i = 0;i < t.len; i++)

		s.ch[i] = t.ch[i];

	s.len = t.len;

} 



//////////////////////////////////////////////



//求串长的算法



int StrLength(SeqString s)

{

	return s.len;

}



///////////////////////////////////////////////



//串连接的算法



SeqString StrConcat(SeqString s,SeqString t)

{

	int i;

	SeqString str;

	for(i = 0 ;i < s.len ; i++)

		str.ch[i] = s.ch[i];

	for(i = 0 ; i < t.len;i++)

		str.ch[i+s.len] = t.ch[i];

	str.len =s.len + t.len;

	

	return  str; 

} 

///////////////////////////////////////////////



//求子串的算法,返回从第i个字符开始,连续的j个字符组成的子串



SeqString SubString(SeqString s,int i,int j)

{

	SeqString str;

	int k;

	if(i < 1 || i > s.len || i+j-1 > s.len)

		printf("参数错误!\n"); 

	for(k = i-1;k < i+j;k++ )

		str.ch[k-i+1] = s.ch[k];

	str.len = j;

	return str;

} 



///////////////////////////////////////////////



//串插入的算法



SeqString InsertString(SeqString &s,int i, SeqString t)

{

	s.len =s.len + t.len;

	int j;

	for(j = s.len - 1; j >- i-1; j--)

		s.ch[j+t.len] = s.ch[j];

	i = i - 1;	

	for(j = 0 ; j < t.len; j++)

		s.ch[i++] = t.ch[j];

	return s; 

}



///////////////////////////////////////////////



//删除字串的算法,从s中删除第i个字符开始的长度为j的子串



SeqString DeleteString(SeqString &s,int i, int j)

{

	int k;

	if(i < 0 || i > s.len || i+j-1 > s.len)

		printf("参数不正确!\n");

	for(k = i-1 ;k <s.len-j;k++)

		s.ch[k] = s.ch[k+j];

	s.len = s.len - j;

	return s; 

} 



/////////////////////////////////////////////////// 



// 串的输出



void Output(SeqString s)

{

	int i;

	for(i = 0 ; i < s.len; i++)

		printf("%c",s.ch[i]);

	printf("\n");

} 

int main()

{

	char c[100];

	SeqString str;

	printf("请输入要创建的字符串:");

	scanf("%s",c);

	StrAssign(str,c);

	Output(str);

	

	int i = StrLength(str);

	printf("字符串的长度为:%d\n",i);

	

	printf("要复制的字符串:");

	char tempc[100];

	SeqString tstr;

	scanf("%s",tempc);

	StrAssign(tstr,tempc);

	StrCopy(str,tstr);

	Output(str);

 	

 	printf("将两个字符串链接起来:");

 	StrAssign(str,c);

 	StrAssign(tstr,tempc);

 	

 	SeqString newstr = StrConcat(str,tstr);

	Output(newstr);

	

	SeqString sstr; 

	int j;

	printf("请输入所要求的子串位置i和长度j:");

	scanf("%d %d",&i,&j);

 	sstr = SubString(newstr,i,j);

	Output(sstr);

	

	printf("请输入要插入的字符串:");

	scanf("%s",c);

	StrAssign(str,c);

	printf("请输入要插入的位置:");

	scanf("%d",&i);

	InsertString(newstr,i,str); 

	Output(newstr);

	

	printf("请输入要删除子串的位置和长度:");

	scanf("%d %d",&i,&j);

	DeleteString(newstr,i,j);

	Output(newstr); 

	return 0;

} 

你可能感兴趣的:(初始化)