加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

第四章 串的基本操作【数据结构】

发布时间:2020-12-15 06:34:09 所属栏目:安全 来源:网络整理
导读:运行截图。 自己太久没有这样用过指针了,总是用不好~~ 下次自己申请了一个指针,就得初始化,不然在判断是否为空的操作下,会导致程序停止运行。(传说中的敲代码5分钟,debug2小时又被我碰上了,泪目)。 #includestdio.h #include string .h #include std

运行截图。

自己太久没有这样用过指针了,总是用不好~~

下次自己申请了一个指针,就得初始化,不然在判断是否为空的操作下,会导致程序停止运行。(传说中的敲代码5分钟,debug2小时又被我碰上了,泪目)。


#include<stdio.h>
#include<string.h> 
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define MAXSIZE 1000
typedef int Status;
//------串的堆存储表示-------- 
typedef struct{
    char *ch;若是非空串,则按串长分配存储区,否则ch为NULL 
    int length;串长度 
}HString;
--------------------------------------基本操作的算法描述--------------------- 
生成一个其值等于串常量chars的串T 
Status StrAssign(HString *T,char *chars)
{
    int i,j;
    char *c;
    if(T->ch)
        free(T->ch);释放T原有的存储空间 
    for(i = 0,c = chars;*c; c++,i++);求chars串的长度 
    if(!i)
    {
        T->ch = NULL;
        T->length = 0;
    }
    else
    {
        T->ch = (char*)malloc(i*sizeof(char));
        if(!T->ch)
            exit(0);
        j = 0;
        while(j < i)
        {
            T->ch[j] = chars[j++];
        }
        T->length = i;
    }
    return OK;
}
返回串S的长度
int StrLength(HString S) 
{
    return S.length;
}
若S>T,返回值>0;若S==T,返回值=0;若S<T,返回值<0 
int StrCompare(HString S,HString T)
{
    for(int i = 0;i < S.length &&i< T.length ;i ++)
        if(S.ch[i]!=T.ch[i])
        {
            return S.ch[i] - T.ch[i];
        }
            
    return S.length - T.length ;
}
用T返回由s1和s2连接而成的新串
Status Contact(HString &T,HString s1,HString s2)
{
    if(T.ch)
        free(T.ch);释放旧空间
     
    
} 
清空串S 
Status ClearString(HString &S)
{
    if(S.ch)
    {
        free(S.ch);
        S.ch = NULL;
    }
    S.length = 0;
    连接串s1和串s2,用T返回 
Status Concat(HString &T,128)">0,0)">释放旧空间 
    T.ch = (malloc((s1.length + s2.length )*char));
    if(!T.ch)
        exit(0);
    while(i < s1.length)
    {
        T.ch[i] = s1.ch[i++];
    }
    T.length = s1.length + s2.length ;
    j = while(j < s2.length)
    {
        T.ch [i++] = s2.ch[j++];
    }
    返回串s的第pos个字符起长度为len的子串
Status SubString(HString &sub,HString s,255)">int pos,255)">int len)
{
    if(pos < 1||pos > s.length || len < 0||len > s.length -1)
        return ERROR;
    if(sub.ch)
        free(sub.ch);
    if(!len)空子串 
    {
        sub.ch = NULL;
        sub.ch = else完整子串 
    {
        sub.ch = (malloc(len*while(i < len)
        {
            sub.ch[i] = s.ch[pos+i-1];
            i++;
        }
        sub.length = len;
    }
    return OK;
} 
在S串的第pos个字符前插入串T 
Status StrInsert(HString &S,255)">int pos,128)">0||pos > S.length-1)pos 不合法 
        if(T.length)T非空,则重新分配存储空间,插入T 
    {
        S.ch = (realloc(S.ch,(S.length + T.length)*if(!S.ch)
            exit(0);
        int i = S.length-1; i >= pos-1;i--)为插入T 腾出位置 
            S.ch[i+T.length] = S.ch[i];
        0; i < T.length ; i ++)插入T 
            S.ch[i+pos-1] = T.ch[i];
        S.length += T.length ;    
        S.ch[S.length] = '';
    }
    int main()
{
    char s1[MAXSIZE],s2[MAXSIZE];
    HString SS,T,sub,S1,S2;
    int flag,pos,len;
    printf("请输入串S1和串S2n");
    while(scanf(%s %s",s1,s2),s1[0]!=#'&&s2[')
    {
        T.ch = SS.ch = NULL;
        StrAssign(&SS,s1);创建串T
        StrAssign(&T,s2); 创建串S 
        printf(S串为:n");
        0;SS.ch[i]!=';i++)
            printf(%c",SS.ch[i]);
        printf(n");
        printf(T串为:n0; T.ch[i]!=';i ++)
            printf(nn");
        
        printf(S串的长度为%dnn比较两串
        if(flag > 0)
            printf(S串>T串nnelse if(flag == S串=T串nnelse
            printf(S串<T串nn");
        S1.ch = S2.ch = NULL;
        StrAssign(&S1,0)">创建串S1 
        StrAssign(&S2,s2);创建串S2 
        Concat(T,S2);将串s1和串s2连接
        printf(连接后的串T为:n0;T.ch[i]!=请输入要在S中输出的子串的位置pos和长度n"); 
        scanf(%d%d返回串s的第pos个字符起长度为len的子串 
        printf(子串为:n0; sub.ch[i]!=");
        
        StrInsert(SS,T);在串S的第pos个位置前插入串T
        printf(在第%d个位置前入串T后的串S为:n';i++)
             printf(");
        
        ClearString(SS);清空串S
    }
    return 0;
 } 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读