领会顺序串存储结构和顺序串中各种基本运算算法设计
结构体 声明顺序串类型
typedef struct {
char data[100];//串中字符
int length;//串长
}Sqstring;
创建顺序串
strassign(Sqstring& s, char str[]):由串常量str创建顺序串s
void strassign(Sqstring& s, char str[]) {//由常量串创建顺序串
for ( int i = 0; i < str[i]!='\0'; i++) {
s.data[i] = str[i];
s.length = i;
}
}
销毁串
void destroystr(Sqstring& s){}//销毁串
复制串
将顺序串t复制到串s
void strcopy(Sqstring& s, Sqstring t) {//串复制
for (int i = 0; i < t.length; i++) {
s.data[i] = t.data[i];
}
s.length = t.length;
}
判相等
判断两个顺序串s和t是否相等
void strequal(Sqstring s, Sqstring t) {//判断串相等
if ( s.length != t.length ) {
printf("两串不相同\n");
}
else {
for (int i = 0; i < t.length; i++) {
if (s.data[i] != t.data[i]) {
printf("两串不相同\n");
break;
}
}
printf("两串相同\n");
}
}
求串长度
void strlength(Sqstring s) {//求串长度
printf("串的长度为%d\n", s.length);
}
串连接
返回将顺序串t连接到顺序串s之后构成的新串
Sqstring concat(Sqstring s, Sqstring t) {//串连接
Sqstring str;
int i;
str.length = s.length + t.length;
for ( i = 0; i < s.length; i++) {
str.data[i] = s.data[i];
}
for ( i = 0; i < t.length; i++) {
str.data[s.length + i] = t.data[i];
}
return str;
}
求子串
返回顺序串s中第i个字符开始的j个字符构成的新串
Sqstring substr(Sqstring s, int i, int j) {//求子串
Sqstring str;
int k;
str.length = 0;
if (i <= 0 || i > s.length || j < 0 || i + j - 1 > s.length ) {
return str;//参数不正确时返回空串
}
for ( k = i-1; k < i+j-1; k++) {
str.data[k - i + 1] = s.data[k];
}
str.length = j;
return str;
}
插入子串
返回将顺序串s2插入到顺序串s1中的第i个位置构成的新串
Sqstring insterstr(Sqstring s1, int i, Sqstring s2) {//插入子串
int j;
Sqstring str;
if ( i <= 0 || i > s1.length + 1 ) {
return str;//参数不正确时返回空串
}
for ( j = 0; j < i - 1; j++) {
str.data[j] = s1.data[j];
}
for ( j = 0; j < s2.length; j++) {
str.data[i + j - 1] = s2.data[j];
}
for ( j = i - 1; j < s1.length; j++) {
str.data[s2.length + j] = s1.data[j];
}
str.length = s1.length + s2.length;
return str;
}
删除子串
返回删除顺序串s中的第i个字符开始的j个字符构成的新串
Sqstring deletestr(Sqstring s, int i, int j) {//删除子串
int k; Sqstring str;
str.length = 0;
if ( i <= 0 || i >s.length || i + j > s.length + 1 ) {
return str;//参数不正确时返回空串
}
for ( k = 0; k < i-1; k++) {
str.data[k] = s.data[k];
}
for ( k = i + j -1; k < s.length; k++) {
str.data[k - j] = s.data[k];
}
str.length = s.length - j;
return str;
}
替换子串
返回将顺序串s的第i个字符开始的j个字符替换成顺序串t构成的新串
Sqstring repstr(Sqstring s, int i, int j, Sqstring t) {//替换子串
int k; Sqstring str;
str.length = 0;
if (i <= 0 || i > s.length || i + j - 1 > s.length) {
return str;
}
for ( k = 0; k < i - 1; k++) {
str.data[k] = s.data[k];
}
for ( k = 0; k < t.length; k++) {
str.data[i + k - 1] = t.data[k];
}
for ( k = i+k-1; k < s.length; k++) {
str.data[t.length + k - j] = s.data[k];
}
str.length = s.length - j + t.length;
return str;
}
输出子串
void showstr(Sqstring s) {//输出子串
if (s.length>0) {
for (int i = 0; i < s.length; i++) {
printf("%c ", s.data[i]);
}
printf("\n");
}
}