使用c语言编一道程序分别求定长顺序串的复制,定长顺序串的长度、连接,定长顺序串求子串,定长顺序串的定位,插入、删除、替换,定长顺序串的比较。
时间: 2023-10-28 14:05:47 浏览: 61
数据结构-c语言-带main函数-串2-串复制-根据标准库函数strcpy ()和定义求串复制函数的两种方法。
以下是使用C语言编写的定长顺序串操作函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
typedef struct {
char ch[MAXLEN];
int length;
} SString;
// 复制顺序串
void copy(SString *s, SString t) {
int i;
for (i = 0; i < t.length; i++) {
s->ch[i] = t.ch[i];
}
s->length = t.length;
}
// 求顺序串长度
int length(SString s) {
return s.length;
}
// 连接两个顺序串
void concat(SString *s, SString t) {
int i;
for (i = 0; i < t.length; i++) {
s->ch[s->length + i] = t.ch[i];
}
s->length += t.length;
}
// 求子串
void substring(SString *sub, SString s, int pos, int len) {
int i;
for (i = 0; i < len; i++) {
sub->ch[i] = s.ch[pos + i - 1];
}
sub->length = len;
}
// 定位
int index(SString s, SString t) {
int i = 0, j = 0, k = 0;
while (i < s.length && j < t.length) {
if (s.ch[i] == t.ch[j]) {
i++;
j++;
} else {
j = 0;
k++;
i = k;
}
}
if (j == t.length) {
return k + 1;
} else {
return 0;
}
}
// 插入
void insert(SString *s, int pos, SString t) {
int i;
for (i = s->length - 1; i >= pos - 1; i--) {
s->ch[i + t.length] = s->ch[i];
}
for (i = 0; i < t.length; i++) {
s->ch[pos + i - 1] = t.ch[i];
}
s->length += t.length;
}
// 删除
void delete(SString *s, int pos, int len) {
int i;
for (i = pos + len - 1; i < s->length; i++) {
s->ch[i - len] = s->ch[i];
}
s->length -= len;
}
// 替换
void replace(SString *s, SString t, SString v) {
int i, j, k;
i = 1;
while (i <= s->length - t.length + 1) {
substring(&v, *s, i, t.length);
if (strcmp(t.ch, v.ch) == 0) {
for (j = i, k = 0; k < v.length; j++, k++) {
s->ch[j - 1] = v.ch[k];
}
for (j = i + t.length; j <= s->length; j++) {
s->ch[j - t.length + v.length - 1] = s->ch[j - 1];
}
s->length += v.length - t.length;
i += v.length;
} else {
i++;
}
}
}
// 比较
int compare(SString s, SString t) {
int i;
for (i = 0; i < s.length && i < t.length; i++) {
if (s.ch[i] != t.ch[i]) {
return s.ch[i] - t.ch[i];
}
}
return s.length - t.length;
}
int main() {
SString s, t, sub, v;
strcpy(s.ch, "hello");
s.length = strlen("hello");
printf("s: %s\n", s.ch);
copy(&t, s);
printf("t: %s\n", t.ch);
printf("length(s): %d\n", length(s));
printf("length(t): %d\n", length(t));
strcpy(t.ch, "world");
t.length = strlen("world");
printf("t: %s\n", t.ch);
concat(&s, t);
printf("s: %s\n", s.ch);
substring(&sub, s, 2, 5);
printf("sub: %s\n", sub.ch);
printf("index(s, t): %d\n", index(s, t));
strcpy(t.ch, "or");
t.length = strlen("or");
printf("t: %s\n", t.ch);
insert(&s, 2, t);
printf("s: %s\n", s.ch);
delete(&s, 7, 3);
printf("s: %s\n", s.ch);
strcpy(t.ch, "llo");
t.length = strlen("llo");
printf("t: %s\n", t.ch);
strcpy(v.ch, "rr");
v.length = strlen("rr");
printf("v: %s\n", v.ch);
replace(&s, t, v);
printf("s: %s\n", s.ch);
printf("compare(s, t): %d\n", compare(s, t));
return 0;
}
```
以上代码中,`SString` 结构体表示定长顺序串,包含 `ch` 和 `length` 两个成员变量。其中,`ch` 存放字符串,`length` 存放字符串长度。本程序实现了复制顺序串、求顺序串长度、连接两个顺序串、求子串、定位、插入、删除、替换、比较等操作。
阅读全文