书上具体所有题目:http://pan.baidu.com/s/1hssH0KO
代码:(Accepted,0 ms)
//UVa1593 - Alignment of Code #include<iostream> #include<algorithm> #include<vector> #include<string> #include<sstream> #include<iterator> #include<iomanip> using namespace std; vector<string> text[1009]; int num[100] = { 0 }, X = 0; char line[200]; int main() { //freopen("in.txt", "r", stdin); while (cin.getline(line, 200)) { istringstream in(line); istream_iterator<string> fi(in), eof; int y = 0; while (fi != eof) { text[X].push_back(*fi); num[y] = max(num[y], (int)fi->size()); ++y, ++fi; } ++X; } for (int i = 0;i < X;++i) { int t = text[i].size() - 1; for (int j = 0;j < t;++j) cout << left << setw(num[j] + 1) << text[i][j]; cout << *(text[i].rbegin()) << '\n'; } return 0; }题意:把很多行的单词排整齐。本来每一行中的各个单词之间含有随机个空格或tab,现在要求每一列单词左对齐。很好懂。
分析:思路很简单:找出每一列单词的最大字母数,再根据此输出即可。紫书也说了,这章不难,主要练习一下STL。之前我抱着C++ Primer也啃了很久,那这章就把之前学到的不管是不是很偏的东西尽量都用上吧。 读取文件不仅用了<sstream>,而且用了头文件iterator,用了流迭代器。其实流迭代器这里并没有什么优势,直接用流读入就行。我只是练习一下。(因为对流还能有迭代器感觉很神奇) 对于头文件<algorithm>,用到了max函数。其实在这里的情况下并没有很划算。就是 a=max(a,b);的情况。直接if (a < b) a = b;更好,这样还省掉一些赋值。 输出直接用了头文件<iomanip>里的setw对齐,left左对齐,方便的很!
转载于:https://www.cnblogs.com/xienaoban/p/6798094.html