测了样例没错,但为什么是 wa 啊!
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
string a[N][N];//a[i][j]存的是第i行的第j个单词
int maxx[N], cnt[N];
//maxx[i]表示第i个单词的最大长度
//cnt[i]表示第i行的单词数
int main()
{
int n = 0;
string s;
while (getline(cin, s))
{
n++;
int lst = 0, len = s.size();
//lst表示当前单词的开头
while (s[len - 1] == ' ' || s[len - 1] == '\r' || s[len - 1] == '\n') len--;//清除末尾空格
//cout << s[len - 1] << endl;
for (int i = 0; i < len; i++)
{
if (s[i] == ' ' && i == 0 || s[i - 1] == ' ') lst = i + 1;//如果当前是空格且前一个是空格
if (s[i] == ' ' && i != 0 && s[i - 1] != ' ')//如果当前是空格且前一个不是空格就截取单词
{
//cout << i << " " << lst << endl;
if (lst == 0) a[n][++cnt[n]] = s.substr(0, i - lst);
else a[n][++cnt[n]] = s.substr(lst - 1, i - lst + 1);//存储单词
lst = i + 1;
}
}
if (lst == 0) a[n][++cnt[n]] = s.substr(0, len - lst);
else a[n][++cnt[n]] = s.substr(lst - 1, len - lst + 1);//存储最后一个单词
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= cnt[i]; j++)
maxx[j] = max(maxx[j], (int)a[i][j].size());//寻找最长长度
//for (int i = 1; i <= 6; i++) cout << maxx[i] << endl;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= cnt[i]; j++)
{
int len = a[i][j].size();
//cout << "r";
cout << a[i][j];
if (j != cnt[i])//如果不是最后一个单词则输出空格
for (int k = 1; k <= maxx[j] - len + 1; k++)//输出长度为第j个单词最长长度-当前单词长度+多的空格
cout << " ";
}
if (i != n) cout << endl;
}
return 0;
}