总的实现代码:
#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;
}
没有回复内容