紫书刷题进行中,题解系列【GitHub|CSDN】
习题5-1 UVA1593 Alignment of Code(24行AC代码)
题目大意
给出若干行字符串,每行单词间以若干个空格分隔,先要求以最小间隔对齐每列单词
思路分析
读入每行后,用stringstream
进行分割得到每行对应单词集合,统计每一列中单词的最长长度maxlen。如果是最后一列,直接输出,否则对齐宽度为maxlen+1(加1是最小间隔)
AC代码(C++11,stringstream分割)
#include<bits/stdc++.h>
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, ' '); // 补空格
printf("%s", st.c_str());
}
puts("");
}
return 0;
}