注解
1、模拟题,要看清楚题目要求,仔细想各种情况。
2、两个单词的word cross,要从第一个单词的第一个字母开始遍历,找到该字母在第二个单词中是否有出现,有出现的第一个字母就是符合题目要求的。
3、由于是两对单词放在一行输出,因此分为两种情况,首先求出index和index2数组,然后分为以下几部分分别输出:(1)上方只含有1个字母的部分;(2)上方含有2个字母的部分;(3)水平单词;(4)下方含有2个字母的部分;(5)下方只含有1个字母的部分。
代码
#include <iostream>
using namespace std;
int isFirst = 1;
string s[2], s2[2];
int index[2], index2[2];
void findIndex(string s[], int index[]) {
index[0] = -1;
index[1] = -1;
int len = s[0].length();
for(int i=0; i<len; i++) {
char c = s[0].at(i);
int cpos = s[1].find(c);
if(cpos!=-1) {
index[1] = cpos;
index[0] = i;
break;
}
}
}
void printSpace(int start, int end) {
for(int i=start; i<end; i++) {
cout<<" ";
}
}
void printHori() {
cout<<s[0]<<" "<<s2[0]<<endl;
}
void printChar(char c, int flag) {
cout<<c;
if(flag) {
cout<<endl;
}
}
void printOther(int i, int j) {
while( i<s[1].length() || j<s2[1].length() ) {
if(i<s[1].length() && j<s2[1].length()) {
printSpace(0, index[0]);
printChar(s[1].at(i++), 0);
printSpace(0, s[0].length()-index[0]+2+index2[0]);
printChar(s2[1].at(j++), 1);
} else if(i<s[1].length()) {
printSpace(0, index[0]);
printChar(s[1].at(i++), 1);
} else {
printSpace(0, s[0].length()+3+index2[0]);
printChar(s2[1].at(j++), 1);
}
}
}
int main() {
cin>>s[0];
while(s[0].compare("#")) {
if(isFirst) {
isFirst = 0;
} else {
cout<<endl;
}
cin>>s[1]>>s2[0]>>s2[1];
findIndex(s, index);
findIndex(s2, index2);
if(index[1]==-1 || index2[1]==-1) {
cout<<"Unable to make two crosses"<<endl;
} else {
int i = 0;
int j = 0;
if(index[1]>=index2[1]) {
int diff = index[1]-index2[1];
for(i=0; i<diff; i++) {
printSpace(0, index[0]);
printChar(s[1].at(i), 1);
}
for(i=diff; i<index[1]; i++) {
printSpace(0, index[0]);
printChar(s[1].at(i), 0);
printSpace(0, s[0].length()-index[0]+2+index2[0]);
printChar(s2[1].at(j++), 1);
}
printHori();
i++;
j++;
printOther(i, j);
} else {
int diff = index2[1]-index[1];
for(j=0; j<diff; j++) {
printSpace(0, s[0].length()+3);
printSpace(0, index2[0]);
printChar(s2[1].at(j), 1);
}
for(i=0; i<index[1]; i++) {
printSpace(0, index[0]);
printChar(s[1].at(i), 0);
printSpace(0, s[0].length()-index[0]+2+index2[0]);
printChar(s2[1].at(j++), 1);
}
printHori();
i++;
j++;
printOther(i, j);
}
}
cin>>s[0];
}
return 0;
}