使用c语言编一道程序分别求定长顺序串的复制,定长顺序串的长度、连接,定长顺序串求子串,定长顺序串的定位,插入、删除、替换,定长顺序串的比较。
时间: 2023-10-28 13:05:47 浏览: 93
以下是使用C语言实现定长顺序串的各种操作的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100 // 定义定长顺序串的最大长度
typedef struct {
char data[MAX_LEN]; // 存储字符数组
int len; // 当前串长
} SeqString;
// 复制定长顺序串
void copy(SeqString *s, SeqString *t) {
memcpy(t->data, s->data, s->len);
t->len = s->len;
}
// 获取定长顺序串的长度
int length(SeqString *s) {
return s->len;
}
// 连接两个定长顺序串
SeqString concat(SeqString *s, SeqString *t) {
SeqString result;
memcpy(result.data, s->data, s->len);
memcpy(result.data + s->len, t->data, t->len);
result.len = s->len + t->len;
return result;
}
// 获取定长顺序串的子串
SeqString subString(SeqString *s, int pos, int len) {
SeqString result;
memcpy(result.data, s->data + pos, len);
result.len = len;
return result;
}
// 查找定长顺序串中另一个串的位置
int find(SeqString *s, SeqString *t) {
for (int i = 0; i <= s->len - t->len; i++) {
if (memcmp(s->data + i, t->data, t->len) == 0) {
return i;
}
}
return -1;
}
// 在定长顺序串中插入另一个串
void insert(SeqString *s, int pos, SeqString *t) {
if (s->len + t->len > MAX_LEN) {
printf("Error: The resulting string is too long.\n");
return;
}
memmove(s->data + pos + t->len, s->data + pos, s->len - pos);
memcpy(s->data + pos, t->data, t->len);
s->len += t->len;
}
// 删除定长顺序串中的一段子串
void delete(SeqString *s, int pos, int len) {
memmove(s->data + pos, s->data + pos + len, s->len - pos - len);
s->len -= len;
}
// 替换定长顺序串中的一段子串
void replace(SeqString *s, int pos, int len, SeqString *t) {
if (s->len - len + t->len > MAX_LEN) {
printf("Error: The resulting string is too long.\n");
return;
}
memmove(s->data + pos + t->len, s->data + pos + len, s->len - pos - len);
memcpy(s->data + pos, t->data, t->len);
s->len = s->len - len + t->len;
}
// 比较两个定长顺序串是否相等
int compare(SeqString *s, SeqString *t) {
if (s->len != t->len) {
return 0;
}
return memcmp(s->data, t->data, s->len) == 0;
}
int main() {
SeqString s = {"hello world", 11};
SeqString t;
// 复制
copy(&s, &t);
printf("Copy: %s\n", t.data);
// 获取长度
printf("Length: %d\n", length(&s));
// 连接
SeqString r = {"!", 1};
SeqString result = concat(&s, &r);
printf("Concat: %s\n", result.data);
// 获取子串
SeqString sub = subString(&s, 6, 5);
printf("Substring: %s\n", sub.data);
// 查找位置
SeqString findStr = {"world", 5};
int pos = find(&s, &findStr);
printf("Find: %d\n", pos);
// 插入
SeqString insertStr = {" beautiful", 10};
insert(&s, 5, &insertStr);
printf("Insert: %s\n", s.data);
// 删除
delete(&s, 11, 3);
printf("Delete: %s\n", s.data);
// 替换
SeqString replaceStr = {"everyone", 8};
replace(&s, 6, 5, &replaceStr);
printf("Replace: %s\n", s.data);
// 比较
SeqString cmpStr1 = {"Hello world", 11};
SeqString cmpStr2 = {"hello world!", 12};
printf("Compare: %d %d\n", compare(&s, &cmpStr1), compare(&s, &cmpStr2));
return 0;
}
```
阅读全文