【问题描述】
实现串的顺序表示和基本操作。
【输入形式】
第一行输入一个字符串;
第二行输入一个字符串;
第三行输入两个整数,分别表示在第一个字符串中获取子串的起始位置和长度;
【输出形式】
输出两个字符串比较的结果,若相等输出=,否则输出<>
输出子串(若子串获取不成功,输出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;
}
标签:表示,SqString,int,s2,s1,length,基本操作,data
From: https://blog.51cto.com/u_16030624/6188354