串的定长顺序存储
示例代码
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 255
typedef unsigned char SString[MAXLEN+1];
int Concat(SString t, SString s1, SString s2);
int SubString(SString sub, SString s, int pos, int len);
void print_hyphen(int n);
int main(void)
{
int i,j,k;
SString ST1,ST2,ST3;
printf("请输入字符串: ");
i = 1, j = 0;
while(1){
if(scanf("%c", &ST1[i]) == EOF || ST1[i] == '\n')
break;
i++;
j++;
}
ST1[0] = j;
int end = 0;
int ope;
int n;
while(!end){
print_hyphen(15); printf("\n");
printf("请输入指令来执行操作\n");
print_hyphen(15); printf("\n");
printf("1、求子串\n2、串连接\n3、退出\n");
print_hyphen(15); printf("\n");
printf("输入要使用的功能的序号: ");
scanf("%d", &ope);
switch(ope){
case 1:
printf("请输入子串的起始位置: ");
int pos, len;
scanf("%d", &pos);
printf("请输入子串的长度: ");
scanf("%d", &len);
if(SubString(ST3, ST1, pos, len)){
printf("子串为:\n");
for(n = 1; n <= ST3[0]; n++)
printf("%c", ST3[n]);
printf("\n");
}
else
printf("输入不合法!\n");
break;
case 2:
printf("请再输入一个字符串: ");
getchar();
i = 1, j = 0;
while(1){
if(scanf("%c", &ST2[i]) == EOF || ST2[i] == '\n')
break;
i++;
j++;
}
ST2[0] = j;
if(Concat(ST3, ST1, ST2)){
printf("串连接成功!\n");
printf("连接后的串为: \n");
for(n = 1; n <= ST3[0]; n++)
printf("%c", ST3[n]);
printf("\n");
}
else
printf("串连接失败!\n");
break;
case 3:
printf("再见!\n");
end = 1;
break;
default:
printf("无此序号,请重新输入!\n");
}
}
return 0;
}
int Concat(SString t, SString s1, SString s2)
{
int i, j;
int m, n;
m = s1[0];
n = s2[0];
if(m+n > MAXLEN)
return 0;
for(i = 1; i <= m; i++)
t[i] = s1[i];
for(j = 1; j <= n; j++)
t[m+j] = s2[j];
t[0] = m+n;
return 1;
}
int SubString(SString sub, SString s, int pos, int len)
{
int i;
if(pos < 1 || pos > s[0] || len < 0 || len > s[0]-pos+1)
return 0;
for(i = 1; i <= len; i++)
sub[i] = s[i+pos-1];
sub[0] = len;
}
void print_hyphen(int n)
{
while(n--)
printf("-");
}