newwy
奋斗在IT路上的小蜗牛。一步一步往上爬,爬到小牛,在到大牛,然后是神牛,然后是犇,然后就可以离开IT行业,回归大自然了。 远离IT,珍爱生命!!! 记录学习的点滴。
//////////////////////////////////////////////
//顺序串的初始化,建立,插入,查找,删除。  //
//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;
} 
posted on 2010-10-10 22:49  newwy  阅读(1455)  评论(0编辑  收藏  举报