严版数据结构73页。
IDE:VS2015
#include<iostream>
#include<string>
#define Status int
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
using namespace std;
Status Concat(SString &T, SString S1, SString S2)
{
bool uncut;
if (S1[0] +S2[0] <= MAXSTRLEN)//未被截断
{
for (int i = 1; i <= S1[0]; i++)
{
T[i] = S1[i];
}
for (int i = 1; i <= S2[0]; i++)
{
T[i + S1[0]] = S2[i];
}
T[0] = S1[0] + S2[0];
uncut = TRUE;
}
else if (S1[0] < MAXSTRLEN)//截断
{
for (int i = 1; i <= (int)S1[0]; i++)
{
T[i] = S1[i];
}
for (int i = 1; i <= MAXSTRLEN - (int)S1[0]; i++)
{
T[i + S1[0]] = S2[i];
}
T[0] = MAXSTRLEN;
uncut = FALSE;
}
else {//截取,只取S1
for (int i = 0; i <= MAXSTRLEN; i++)
{
T[i] = S1[i];
}
uncut = FALSE;
}
return uncut;
}
Status SubString(SString &Sub, SString S, int pos, int len)
{
if (pos<1 || pos>(int)S[0] || len<0 || len>(int)S[0] - pos + 1)
return ERROR;
for (int i = 1; i <= len; i++)
{
Sub[i] = S[pos + i-1];
}
Sub[0] = len;
return OK;
}
void main()
{
SString T, S1, S2, S, Sub;
int i, pos, len;
cout << "输入串S1的长度:";
cin >> S1[0];
S1[0] -= 48;
getchar();
cout << "输入串S1的值:";
for (i = 1; i <= S1[0]; i++)
{
cin >> S1[i];
}
cout <<"输出串S1的值:"<< endl;
for (i = 1; i <= S1[0]; i++)
{
cout << S1[i];
}
cout << endl;
cout << "输入串S2的长度:";
cin >> S2[0];
S2[0] -= 48;
getchar();
cout << "输入串S2的值:";
for (i = 1; i <= S2[0]; i++)
{
cin >> S2[i];
}
cout <<"输出串S2的值:"<< endl;
for (i = 1; i <= S2[0]; i++)
{
cout << S2[i];
}
cout << endl;
Concat(T, S1, S2);
cout << "输出串S1和串S2的联接串T的值:" << endl;
for (i = 1; i <= T[0]; i++)
{
cout << T[i];
}
cout << endl;
cout << "输入串S的长度:";
cin >> S[0];
S[0] -= 48;
getchar();
cout << "输入串S的值:" << endl;
for (i = 1; i <= S[0]; i++)
{
cin >> S[i];
}
cout << "输出串S的值:" << endl;
for (i = 1; i <= S[0]; i++)
{
cout << S[i];
}
cout << endl;
cout << "输入串S的子串Sub的开始字符位置:";
cin >> pos;
cout << "输入串S的子串Sub的长度:";
cin >> len;
SubString(Sub, S, pos, len);
cout << "输出子串Sub的值:" << endl;
for (i = 1; i <= Sub[0]; i++)
{
cout << Sub[i];
}
cout << endl;
system("pause");
}