#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 ****************************************************************/