#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char *data;
int length;
int stringsize;
} SqString;
//初始化
int initString(SqString *s) {
s->data = (char *)malloc(sizeof(char) * MAXSIZE);
if (!s->data)
return 0;
s->length = 0;
s->stringsize = MAXSIZE;
return 1;
}
//将字符串str赋值到串s中
int strAssign(SqString *s, char *str ) {
int i = 0;
while (*str) {
s->data[i] = *str++;
i++;
}
s->data[i] = '\0';
s->length = i;
return 1;
}
//串比较
int strCompare(SqString *s, SqString *t) {
int i;
for (i = 0; i < s->length && i < t->length; i++) {
if (s->data[i] != t->data[i]) {
return s->data[i] - t->data[i];
}
}
return s->length - t->length;
}
//在s中从pos开始取len长度的子串到sub中
int subString(SqString *sub, SqString *s, int pos, int len) {
if (pos < 1 || pos > s->length || len < 0 || len > s->length + 1 - pos) {
return 0;
}
int i = 0;
sub->length = 0;
for (i = 0; i < len; i++) {
sub->data[i] = s->data[pos - 1 + i];
}
sub->length = i;
sub->data[i] = '\0';
s->data[pos - 1] = '\0';
s->length = pos - 1;
return 1;
}
//将s1与s2连接到s中
int strConcat(SqString *s, SqString *s1, SqString *s2) {
if (s1->stringsize + s2->stringsize >= s->stringsize) {
s->data = (char *)realloc(s->data, (MAXSIZE + s->stringsize) * sizeof(char));
if (!s->data)
return 0;
s->stringsize += MAXSIZE;
}
int i = 0, j = 0;
while (i < s1->length) {
s->data[i] = s1->data[i];
i++;
}
while (j < s2->length) {
s->data[i + j] = s2->data[j];
j++;
}
s->data[i + j] = '\0';
s->length = s1->length + s2->length;
return 1;
}
//在s1中指定位置pos插入子串s2
int strInsertSub(SqString *s1, SqString *s2, int pos) {
int i = 0;
SqString sa;
SqString sb;
initString(&sa);
initString(&sb);
if (!sa.data || !sb.data)
return 0;
if (pos < 1 || pos > s1->length + 1)
return 0;
subString(&sa, s1, pos, s1->length - pos + 1);
strConcat(&sb, s1, s2);
strConcat(s1, &sb, &sa);
}
//SqString *sa = (SqString*)malloc(sizeof(SqString));
//SqString *sb = (SqString*)malloc(sizeof(SqString));
//initString(sa);
//initString(sb);
//if (!sa->data || !sb->data) {
// free(sa);
// free(sb);
// return 0;
//}
int main() {
SqString s1, s2;
int pos, n, r;
char str[MAXSIZE];
initString(&s1);
initString(&s2);
scanf("%d", &n);
while (n--) {
getchar();
gets(str);
strAssign(&s1, str);
gets(str);
strAssign(&s2, str);
scanf("%d", &pos);
r = strCompare(&s1, &s2);
if (r > 0)
puts(s1.data);
else if (r < 0)
puts(s2.data);
else
printf("equal\n");
if (strInsertSub(&s1, &s2, pos))
puts(s1.data);
else
printf("error\n");
}
return 0;
}
编写一个子串插入到主串中
原创wx641ed5d0bdd07 ©著作权
©著作权归作者所有:来自51CTO博客作者wx641ed5d0bdd07的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:串的模式匹配(BF算法)
下一篇:记录下来队员们出实验室的顺序
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
有趣的CSS - 一串乱码
通过 css 来实现一段不停变化的 bug 乱码效果。
css 动效 乱码效果 ux 动画 -
C语言:编写从一个字符串中提取一个子字符串的函数my_substr
C语言:编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下:char* my_substr(char* dest, const char* src, size_t pos, size_t destlen){}目标是:从 src 数组起始位置向后偏移 start个字符的位置开始,最多复制 len 个非NUL 字符到 dst数组。在复制完毕之后, dst 数组必须以 NUL字节结尾。函数的返回值是存储于 dst 数组中的字符串的长度。
C语言:编写一个函数从一个字符串中提取一 assert()函数的使用 dest src