编写串的堆式存储,并且不写#include <string.h>这句
时间: 2023-09-11 10:07:47 浏览: 99
以下是一个使用堆式存储的串的示例代码,实现了串的赋值、拼接、比较和输出等基本操作,不使用<string.h>库函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 字符串最大长度
typedef struct {
char *str; // 字符串指针
int len; // 字符串长度
} String;
// 初始化字符串
void initString(String *s) {
s->str = (char *)malloc(MAX_SIZE * sizeof(char)); // 分配初始空间
s->len = 0;
}
// 释放字符串空间
void freeString(String *s) {
free(s->str);
s->len = 0;
}
// 赋值操作
void assignString(String *s, char *c) {
int i, len = 0;
while (c[len] != '\0') { // 计算字符串长度
len++;
}
if (len > MAX_SIZE) {
printf("String too long!\n");
exit(1); // 报错退出
}
for (i = 0; i < len; i++) {
s->str[i] = c[i]; // 逐个字符复制
}
s->str[len] = '\0'; // 添加结束符
s->len = len;
}
// 拼接操作
void concatString(String *s, char *c) {
int i, j, len = 0;
while (c[len] != '\0') { // 计算字符串长度
len++;
}
if (s->len + len > MAX_SIZE) {
printf("String too long!\n");
exit(1); // 报错退出
}
for (i = s->len, j = 0; j < len; i++, j++) {
s->str[i] = c[j]; // 逐个字符复制
}
s->str[i] = '\0'; // 添加结束符
s->len += len;
}
// 比较操作
int cmpString(String *s1, String *s2) {
int i;
for (i = 0; i < s1->len && i < s2->len; i++) {
if (s1->str[i] < s2->str[i]) {
return -1;
} else if (s1->str[i] > s2->str[i]) {
return 1;
}
}
if (s1->len < s2->len) {
return -1;
} else if (s1->len > s2->len) {
return 1;
}
return 0;
}
// 输出操作
void printString(String *s) {
printf("%s\n", s->str);
}
int main() {
String s;
initString(&s);
assignString(&s, "hello");
concatString(&s, " world");
printString(&s);
freeString(&s);
return 0;
}
```
注意在本例中,赋值和拼接操作使用了逐个字符复制的方式,而比较操作则使用了逐个字符比较的方式,效率相对较低。在实际应用中,可以根据具体情况选择使用库函数或自己实现。
阅读全文