用 c 语言版数据结构写出简易版本的完整字符串的基本算法:串复制,串连接,求串长(有 main 函数)
时间: 2024-10-14 21:08:29 浏览: 38
在C语言中,我们可以使用数组来实现字符串的数据结构。下面是一个包含基本操作如串复制、串连接和求串长的简易示例。这里我们假设字符串是以'\0'字符结尾的。
```c
#include <stdio.h>
#include <string.h>
// 定义字符串结构体,包含长度和字符数组
typedef struct {
char* str; // 字符数组
int len; // 长度(不包括结束符 '\0')
} String;
// 功能:复制字符串
void string_copy(String* dest, const String* src) {
if (src->len > 0) { // 检查源字符串是否为空
dest->str = (char*)malloc(src->len + 1); // 分配足够的空间
strncpy(dest->str, src->str, src->len);
dest->str[src->len] = '\0'; // 添加结束符
dest->len = src->len;
}
}
// 功能:连接两个字符串
String string_concat(String* result, const String* str1, const String* str2) {
// 首先检查结果和两个输入字符串的空间
result->len = 0; // 初始化结果长度
if (str1->len > 0 && str2->len > 0) {
result->str = (char*)realloc(result->str, str1->len + str2->len + 1); // 扩展空间
strcat(result->str, str1->str); // 连接第一个字符串
strcat(result->str, str2->str); // 再连接第二个字符串
result->str[result->len] = '\0'; // 添加结束符
result->len += str1->len + str2->len;
}
return *result;
}
// 功能:计算字符串长度
int string_length(const String* str) {
return str ? str->len : 0; // 如果指针有效则返回长度,否则返回0
}
// 主函数
int main() {
String str1 = {"Hello, "}, str2 = {"World!"};
String result;
// 测试串复制
string_copy(&result, &str1);
printf("After copy: %s\n", result.str);
// 测试串连接
result = string_concat(&result, &str1, &str2);
printf("After concat: %s\n", result.str);
// 测试求串长
printf("Length of the final string is: %d\n", string_length(&result));
free(result.str); // 别忘了释放内存
return 0;
}
```
在这个例子中,`string_copy`、`string_concat` 和 `string_length` 函数分别实现了串复制、串连接和求串长的功能。主函数展示了如何使用这些函数。注意,在实际应用中,应始终确保字符串操作结束后释放动态分配的内存。
阅读全文