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

--

//////////////////////////////////////////////
//顺序串的初始化,建立,插入,查找,删除。  //
//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] != ''; 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("参数错误!
"); 
    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("参数不正确!
");
    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("
");
} 
int main()
{
    char c[100];
    SeqString str;
    printf("请输入要创建的字符串:");
    scanf("%s",c);
    StrAssign(str,c);
    Output(str);
     
    int i = StrLength(str);
    printf("字符串的长度为:%d
",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/Ph-one/p/6889860.html