#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 100 // 定义最大长度
typedef struct {
char data[MAX_LEN]; // 存储字符串的数组
int length; // 字符串的实际长度
} SeqString;
// 初始化顺序串
void InitString(SeqString *s) {
s->length = 0;
s->data[0] = '\0'; // 初始化为空字符串
}
// 获取顺序串的长度
int Length(SeqString *s) {
return s->length;
}
// 字符串赋值
void AssignString(SeqString *s, const char *str) {
if (strlen(str) >= MAX_LEN) {
printf("String too long\n");
return;
}
strcpy(s->data, str);
s->length = strlen(s->data);
}
// 字符串比较
int CompareString(SeqString *s1, SeqString *s2) {
return strcmp(s1->data, s2->data);
}
// 字符串连接
void ConcatString(SeqString *s1, SeqString *s2) {
if (s1->length + s2->length >= MAX_LEN) {
printf("Resulting string too long\n");
return;
}
strcat(s1->data, s2->data);
s1->length = strlen(s1->data);
}
// 获取子串
void SubString(SeqString *s, int pos, int len, SeqString *sub) {
if (pos < 1 || pos > s->length || len < 0 || pos + len - 1 > s->length) {
printf("Invalid position or length\n");
return;
}
strncpy(sub->data, s->data + pos - 1, len);
sub->data[len] = '\0'; // 确保字符串结束符
sub->length = len;
}
// 主函数,用于测试
int main() {
SeqString s1, s2, sub;
InitString(&s1);
InitString(&s2);
InitString(&sub);
AssignString(&s1, "Hello");
AssignString(&s2, " World!");
printf("s1: %s\n", s1.data);
printf("s2: %s\n", s2.data);
ConcatString(&s1, &s2);
printf("s1 + s2: %s\n", s1.data);
SubString(&s1, 1, 5, &sub);
printf("Substring: %s\n", sub.data);
return 0;
}
数据结构串的堆分配代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个字符串类型
typedef char* String;
// 创建一个新的字符串,并初始化内容
String createString(const char* content) {
// 分配足够的内存来存储字符串和结尾的'\0'
String str = (String)malloc(strlen(content) + 1);
if (str == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(EXIT_FAILURE);
}
// 复制内容到分配的内存
strcpy(str, content);
return str;
}
// 打印字符串
void printString(String str) {
if (str != NULL) {
printf("%s\n", str);
} else {
printf("String is NULL\n");
}
}
// 释放字符串占用的内存
void freeString(String* str) {
if (*str != NULL) {
free(*str);
*str = NULL; // 避免野指针
}
}
int main() {
// 创建一个字符串
String myString = createString("Hello, World!");
// 打印字符串
printString(myString);
// 释放字符串占用的内存
freeString(&myString);
// 再次打印字符串(应该为NULL)
printString(myString);
return 0;
}