解题思路:用输入流存储每一行,将每一行的单词存入vector中,全部输入完后定义一数组存储每一列的最大单词字符数,接着按照最大字符数的空间逐个打印单词。
题目大意:输入若干行代码,要求各列单词的左边界对齐且尽量靠近。单词之间至少要空一格。每个单词不超过80个字符,每行不超过180个字符,一共最多1000行。
Sample Input
start: integer; // begins here stop: integer; // ends here s: string; c: char; // temp
Sample Output
start: integer; // begins here stop: integer; // ends here s: string; c: char; // temp
#include<cstdio>
#include<string>
#include<vector>
#include<iostream>
#include<sstream>
#include<string.h>
using namespace std;
vector<string> Q[1001]; //每个Q元素存一行
int n; //行数
int maxc[180];
void print(int r,int c,int max) //分别代表行列和这一列最大字符数
{
int M=0;
cout<<Q[r][c];
for(int i=0;i<max-Q[r][c].length();i++)
{
cout<<' ';
}
cout<<' ';
return;
}
int main()
{
string wline;
n=0;
while(getline(cin,wline))
{
stringstream ss(wline); //输入流,该形式一定记住
n++;
string s1;
while(ss>>s1)
{
if(s1[0]==' ') continue;
Q[n].push_back(s1);
}
}
memset(maxc,0,sizeof(maxc));
for(int i=1;i<=n;i++)
{
for(int j=0;j<Q[i].size();j++)
{
if(Q[i][j].length()>maxc[j])
{
maxc[j]=Q[i][j].length(); //得到每一列最大单词字符数
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<Q[i].size();j++)
{
print(i,j,maxc[j]); //逐个打印
}
cout<<endl;
}
return 0;
}