#include <stdio.h>
#include <string.h>
#define MAXSTRLEN 100
typedef char SString[MAXSTRLEN+2];
typedef int Status;
#define TRUE 1
#define FALSE 0
void InputString(SString &str) {
// 读取字符串
scanf("%s", str + 1); // 首先用scanf读取字符串
str[0] = strlen(str + 1); // 求出字符串的长度并保存在str[0]中
}
void PrintString(SString &str) {
// 输出字符串
int i;
for (i = 1; i <= str[0]; i++) {
putchar(str[i]);
}
}
Status Concat(SString &T, SString S1, SString S2) { // 算法4.2
// 用T返回由S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE。
int i;
Status uncut;
if (S1[0] + S2[0] <= MAXSTRLEN) { // 未截断
for (i = 1; i <= S1[0]; i++)
T[i] = S1[i];
for (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 (i = 1; i <= S1[0]; i++)
T[i] = S1[i];
for (i = S1[0] + 1; i <= MAXSTRLEN; i++)
T[i] = S2[i - S1[0]];
T[0] = MAXSTRLEN;
uncut = FALSE;
} else { // 截断(仅取S1)
for (i = 0; i <= MAXSTRLEN; i++)
T[i] = S1[i];
uncut = FALSE;
}
return uncut;
} // Concat
int main(){
int i;
SString T, S1, S2;
for(i=0; i<3; i++){ // 处理三组字符串
InputString(S1); // 输入字符串
InputString(S2);
if(Concat(T, S1, S2)){ // 如果没有被切断则输出连接后的结果
PrintString(T);
putchar('\n');
}else{ // 如果被切断了,则输出相应的提示
puts("Result String is cutted.");
}
}
return 0;
}
/**************************************************************
Problem: 2148
User: admin
Language: C++
Result: Accepted
Time:17 ms
Memory:1144 kb
****************************************************************/