题目大意:给你N行的字符串,要求对这N行字符串进行改装,输出时,原来连续的字符用一个空格隔开,每行的单词竖直对齐,且每行的长度要求达到最短且无前导或者后导空格
解题思路:记录每个字符串的单词的长度,然后用一个数组统计一下每一列的单词的最长长度,输出时,如果单词长度低于该列的最大长度,就用空格补齐
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int MAX_len[200], MAX_num;
struct line{
char str[200];
int num[200];
int len;
}L[1010];
char str[200];
int main() {
int cnt = 0;
memset(MAX_len,0,sizeof(MAX_len));
while(gets(str)) {
int num = 0, count = 0, len = strlen(str);
bool flag = true;
for(int i = 0; i < len ;i++) {
if(flag && str[i] == ' ')
continue;
else if(flag && str[i] != ' ') {
flag = false;
num++;
L[cnt].str[count++] = ' ';
L[cnt].str[count++] = str[i];
}
else if(!flag && str[i] != ' ')
L[cnt].str[count++] = str[i];
else if(!flag && str[i] == ' ')
flag = true;
}
L[cnt].str[count] = '\0';
L[cnt].len = count;
count = 0, num = 0;
for(int j = 1; j <= L[cnt].len; j++) {
if(L[cnt].str[j] == ' ' || j == L[cnt].len) {
MAX_len[num] = max(MAX_len[num],count);
count = 0;
num++;
}
else
count++;
}
MAX_num = max(MAX_num,num);
cnt++;
}
for(int i = 0; i < cnt; i++) {
int cnt = 0, Num = 0, sum = 0;
for(int j = 1; j < L[i].len; j++) {
if(L[i].str[j] != ' ') {
printf("%c",L[i].str[j]);
cnt++;
sum++;
}
else {
for(int k = cnt; k < MAX_len[Num]; k++) {
printf(" ");
sum++;
}
Num++;
cnt = 0;
printf(" ");
}
}
printf("\n");
}
return 0;
}