王道数据结构实践代码----字符串的静态顺序存储实现(C语言版)

王道数据结构实践代码----字符串的静态顺序存储实现(C语言版)

前言

日期:2021年11月20日
书籍:王道2021年数据结构考研复习指导
代码内容:字符串的静态顺序存储实现

分段代码展示

预处理部分

#include <stdio.h>
#include <stdlib.h>

#define bool char
#define true 1
#define false 0

#define MAXLEN 255  //预定义最大串长为255

【0】定义数据结构和其初始化函数

//【0】定义数据结构和其初始化函数
//[1]顺序存储字符串的数据结构
typedef struct SString
{
   
    char ch[MAXLEN + 1];    /*char类型的数组,数组的每个分类存储一个字符*/
    char length;            /*串的实际长度*/
}SString;
//[2]顺序存储字符串的初始化
/**
 * @brief         顺序存储字符串的初始化
 * @param         str 类型:SString*,要进行初始化的字符串
 * @return        成功返回ture,否则返回false
 */
 bool StrInit(SString* Str)
{
   
    Str->length = 0;
    return true;
}

【1】顺序存储字符串的求串长、清空、判空操作

/**
 * @brief         顺序存储字符串的求串长
 * @param         Str 类型:SString,目标字符串
 * @return        返回一个int类型的值(即目标字符串的长度)
 */
int StrLength(SString Str)
{
   
    return Str.length;
}
/**
 * @brief         顺序存储字符串的清空操作
 * @param         Str 类型:SString*,目标字符串的指针
 * @return        成功返回ture,否则返回false
 */
bool StrClear(SString* Str)
{
   
    Str->length = 0;
    return true;
}
/**
 * @brief         顺序存储字符串的判空操作
 * @param         Str 类型:SString,目标字符串
 * @return        串空返回ture,否则返回false
 */
bool StrEmpty(SString Str)
{
   
    return !Str.length;
}

【2】顺序存储字符串的赋值操作和输出操作

//[1]顺序存储字符串的赋值操作
/**
 * @brief         顺序存储字符串的赋值操作,把串src赋值为Dest
 * @param         Dest 类型:SString*,指向用于存储赋值内容的目标字符串的首地址
 * @param         *Src 类型:char,字符串Dest的数组要被赋值的内容
 * @return        赋值成功,返回true,同时Dest被赋给正确的值;否则返回false并报错
 */
bool StrAssign(SString* Dest,char *Src)
{
   
    if(!Src)
    {
   
        printf("StrAssign:Src is NULL!\n");
        return false;
    }
    int i = 1;
    for(i = 1;Src[i - 1] != '\0';i++)
    {
   
        if(i <= MAXLEN)
        {
   
            Dest->ch[i] = Src[i - 1];
        }
        else
        {
   
            break;
        }
    }
    Dest->length = i - 1;
    return true;
}
//[2]顺序存储字符串的输出操作
/**
 * @brief         顺序存储字符串的输出操作
 * @param         Str 类型:SString,目标字符串
 * @return        输出字符串的值和串长
 */
bool StrPrint(SString Str)
{
   
    if(StrEmpty(Str))
    {
   
        printf("StrPrint:The SString is an empty sstring or an error sstring\n");
        return false;
    }
    for(int i = 1;i <= Str.length;i++)
    {
   
        printf("%c",Str.ch[i]);
    }
    printf("\nLength = %d\n\n",StrLength(Str));
    return true;
}

在这里插入图片描述
在这里插入图片描述

【3】顺序存储字符串的复制操作

/**
 * @brief         顺序存储字符串的复制操作,由串Src复制得到串Dest
 * @param         Dest 类型:SString*,用于存储要复制的字符串
 * @param         Src 类型:SString*,用于存储被复制的字符串
 * @return        复制成功,函数返回true,同时Dest的值变成Src的值,否则函数返回fales
 */
bool StrCopy(SString* Dest,SString
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值