紫书刷题(Day2)补题(不是
Alignment of Code UVA - 1593 传送:VJ
题目大意
此题主要考察了vector二维的用法,和记录最大长度的方法,以及一些字符串的操作,对给出的代码进行对齐处理。
主要思路
先用vector储存数据,然后用数组来保存每列的最大长度,并每次循环更新最大值,最后按照要求输出。
具体做法
首先要说的就是vector的二维用法,vector [maxn] 创建一个二维的容器来储存,注意maxn是行数,同时对于动态的vector我们可以用size()函数来返回每行的长度用于下标的记法。
vector<string> lines[1010];
int row=0,maxcol[1010]={0};//行号,每列单词的最长长度
其次就是字符串的处理,这里用到了字符串分流,同时空格隔开,若是有特殊的分割符,则用getline()。
stringstream input(s);
while(input>>st){
maxcol[lines[row].size()]=max(maxcol[lines[row].size()],(int)st.size());//取最大值
lines[row].push_back(st);
}
最后就是字符串的整合,由于我们要把字符串长度一致,故要对字符串后面增加” “空格,因此用到了string()。
st+=string(maxcol[j]-st.size()+1 ,' ');
废话不多说上代码:
#include <iostream>
#include<vector>
#include<sstream>
#include<string>
using namespace std;
string s,st;
vector<string> lines[1010];
int row=0,maxcol[1010]={0};//行号,每列单词的最长长度
int main(){
while( getline(cin,s) ){
stringstream input(s);
while(input>>st){
maxcol[lines[row].size()]=max(maxcol[lines[row].size()],(int)st.size());//取最大值
lines[row].push_back(st);
}
row++;
}
for(int i=0;i<row;i++){//按行输出
for(int j=0;j<lines[i].size();j++){
st=lines[i][j];
if(j!=lines[i].size()-1) st+=string(maxcol[j]-st.size()+1 ,' ');
cout<<st;
}
puts("");//参数是""时则相当于\n
}
return 0;
}