串——串的顺序存储结构设计思路与实现

总的实现代码:

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

// 自定义字符串结构
typedef struct {
    char* data;  // 字符串内容
    int length;  // 字符串长度
} String;

// 初始化字符串
void InitStr(String* str, const char* initial) 
{
    str->length = strlen(initial);
    str->data = (char*)malloc((str->length + 1) * sizeof(char)); // +1 for null terminator
    strcpy(str->data, initial);
}

// 释放字符串内存
void StrFree(String* str) 
{
    free(str->data);
    str->data = NULL;
    str->length = 0;
}

// 计算字符串长度
int StrLen(String* str) 
{
    return str->length;
}

// 字符串拼接
void StrCat(String* dest, const String* src) 
{
    dest->data = (char*)realloc(dest->data, (dest->length + src->length + 1) * sizeof(char)); // +1 for null terminator
    strcat(dest->data, src->data);
    dest->length += src->length;
}

// 查找子字符串
int StrFind(const String* str, const char* substring) 
{
    char* pos = strstr(str->data, substring);
    if (pos) {
        return pos - str->data; // 返回子字符串的起始位置
    }
    return -1; // 未找到
}

// 复制字符串
void StrCopy(String* dest, const String* src) 
{
    free(dest->data); // 释放目标字符串的内存
    dest->length = src->length;
    dest->data = (char*)malloc((dest->length + 1) * sizeof(char)); // +1 for null terminator
    strcpy(dest->data, src->data);
}

// 显示字符串
void StrShow(const String* str) 
{
    printf("字符串内容: %s\n", str->data);
}

int main() 
{
    String str1;
    InitStr(&str1, "Hello");

    String str2;
    InitStr(&str2, " World!");

    printf("字符串1: ");
    StrShow(&str1);
    printf("字符串2: ");
    StrShow(&str2);

    // 拼接字符串
    StrCat(&str1, &str2);
    printf("拼接后的字符串: ");
    StrShow(&str1);

    // 查找子字符串
    const char* substring = "lo";
    int position = StrFind(&str1, substring);
    if (position != -1) 
	{
        printf("子字符串 \"%s\" 在位置 %d\n", substring, position);
    }
	else
	{
        printf("子字符串 \"%s\" 未找到\n", substring);
    }

    // 复制字符串
    String str3;
    InitStr(&str3, "");
    StrCopy(&str3, &str1);
    printf("复制后的字符串: ");
    StrShow(&str3);

    // 释放内存
    StrFree(&str1);
    StrFree(&str2);
    StrFree(&str3);

    return 0;
}

 

请登录后发表评论

    没有回复内容