【问题描述】

实现串的顺序表示和基本操作。

【输入形式】

第一行输入一个字符串;

第二行输入一个字符串;

第三行输入两个整数,分别表示在第一个字符串中获取子串的起始位置和长度;

【输出形式】

输出两个字符串比较的结果,若相等输出=,否则输出<>

输出子串(若子串获取不成功,输出error)

输出两个字符串的连接结果
【样例输入1】

123456

abcdefg

3 4
【样例输出1】

<>

3456

123456abcdefg

【样例输入2】

ABC

ABC

3 4
【样例输出1】

=

error

ABCABC

#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->stringsize = MAXSIZE;
	s->length = 0;
	return 1;





}

//串的复制
int strAssign(SqString *s, char *str ) {
	int i = 0;
	while (*str) {
		s->data[i++] = *str++;
	}
	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;






}

//取子串
int subString(SqString *sub, SqString *s, int pos, int len) {
	int i = 0;
	if (pos < 1 || pos > s->length || len < 0 || len > s->length - pos + 1) {
		return 0;
	}
	sub->length = 0;
	for (i = 0; i < len; i++) {
		sub->data[i] = s->data[i + pos - 1];
		sub->length++;
	}
	sub->data[i] = '\0';
	return 1;






}

//串的连接
int strConcat(SqString *s, SqString *s1, SqString *s2) {
	int i = 0, j = 0;
	if (s1->length + s2->length >= s->stringsize) {
		s->data = (char *)realloc(s->data, (s->stringsize + MAXSIZE) * sizeof(char));
		if (!s->data)
			return 0;
		s->stringsize += MAXSIZE;
	}
	while (i < s1->length) {
		s->data[i] = s1->data[i];
		i++;
	}
	while (j < s2->length) {
		s->data[i++] = s2->data[j++];
	}
	s->data[i] = '\0';
	s->length = s1->length + s2->length;
	return 1;





}

int main() {
	SqString s1, s2, t, s;
	int pos, n;
	char str[MAXSIZE];
	initString(&s1);
	initString(&s2);
	initString(&t);
	initString(&s);
	//读入一个字符串,复制给串s1
	scanf("%s", str);
	strAssign(&s1, str);
	//读入一个字符串,复制给串s1
	scanf("%s", str);
	strAssign(&s2, str);
	//比较s1和s2是否相等
	if (!strCompare(&s1, &s2)) {
		printf("=\n");
	} else {
		printf("<>\n");
	}
	//输入子串位置和长度,在s1中取子串并输出,取不到输出error
	scanf("%d%d", &pos, &n);
	if (subString(&t, &s1, pos, n)) {
		printf("%s\n", t.data);
	} else {
		printf("error\n");
	}
	//连接s1和s2,输出连接结果
	if (strConcat(&s, &s1, &s2))
		printf("%s", s.data);
	else
		printf("error\n");
	return 0;
}