//////////////////////////////////////////////
//顺序串的初始化,建立,插入,查找,删除。 //
//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;
}
转载于:https://www.cnblogs.com/newwy/archive/2010/10/10/1847468.html