严版数据结构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"); }