这题 就是开个string 就没啥了
怎么对齐呢,开个数组 ,保存每一列的单词长度最大值,
输出 用个自动补齐空格的函数(手写啊)曾刘大大用过默默记住了 -
只要行列不乱都好说
上代码
#include <bits/stdc++.h>
using namespace std;
string str[1005][200];
int len[1005][200];
int maxn[200],chang[1005];
void print(string s, int n, char c) //自动补空格
{
int l = s.size();
for (int i = 0; i < n ;i++)
{
if(i < l) cout<<s[i];
else cout<<c;
}
}
int main()
{
string s;
int n = 0, MA = 0;
while(getline(cin,s))
{
int z = 0;
stringstream ss(s); // 读每行单词专用流
while(ss >> str[n][z])
{
len[n][z] = str[n][z].size(); //单词长度
z++;
}
chang[n++] = z; //单词个数
MA = max(z,MA);
}
for (int i = 0; i < MA; i++) //最多的单词个数
{
for (int j = 0; j < n; j++)
{
if(i >= chang[j]) continue; // 超过其行的单词个数就算了
else maxn[i] = max(maxn[i],len[j][i]);
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < chang[i]; j++)
{
if(j) printf(" ");
if(j != chang[i]-1) print(str[i][j],maxn[j],' ');
else cout<<str[i][j];
}
printf("\n");
}
return 0;
}