【数据结构】八、字符串的操作以及BF、KMP算法

目录

一、什么是串?

二、串的结构体定义

三、通过字符输入的方式创建一个串

四、字符串的拼接

五、字符串比较

六、字符串查找子字符串在主字符串中的下标✨

1)BF(暴风)算法

2)KMP算法


一、什么是串?

串是由零个或多个字符组成的有限序列。通常,串中的字符可以是字母、数字、标点符号等。串的长度是指串中字符的个数。例如,"hello"、"123"、"abc"等都是串。串的研究对于文本处理、模式匹配、数据压缩等领域具有重要意义。本文主要使用动态数组存储串,并介绍串的基本操作以及代码实现。

二、串的结构体定义

typedef struct {
    char* string;   //字符串
    int Capacity;   //容量
    int length;     //字符数
}String;

三、通过字符输入的方式创建一个串

//初始化字符串
static void String_Init(String* str)
{
    str->Capacity = 4;
    str->string = NULL;
    str->length = 0;
}

//判断是否需要增容
static void String_Full(String* str)
{
    if (str->length == str->Capacity)
    {
        str->string = (char*)realloc(str->string, 2 * str->Capacity * sizeof(char));
        str->Capacity *= 2;
    }

}

//建立字符串
void String_Creat(String* str)
{
    String_Init(str);
    str->string = (char*)malloc(str->Capacity * sizeof(char));
    char c;
    int i = 0;
    while (1)
    {
        c = getchar();
        String_Full(str);

        if (c == '\n')
            break;
        else
        {
            str->string[i++] = c;
            str->length++;         
        }

    }
    str->string[i] = '
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值