uva 400 Unix ls 文件输出排版 排序题
2013-07-24 19:29
423 查看
这题的需要注意的地方就是计算行数与列数,以及输出的控制。
题目要求每一列都要有能够容纳最长文件名的空间,两列之间要留两个空格,每一行不能超过60。
简单计算下即可。
输出时我用循环输出空格来解决对齐的,其实可以用一个很巧妙的方法,用printf("%-*s", k, file[i]),查过资料后发现*放到转换字符之间可以当作替代符,后面可以输入一个变量(如k)来控制,这句代码意思是输出左对齐(对应负号)的宽度为k(对应*)的字符串file[i]。
代码:
题目要求每一列都要有能够容纳最长文件名的空间,两列之间要留两个空格,每一行不能超过60。
简单计算下即可。
输出时我用循环输出空格来解决对齐的,其实可以用一个很巧妙的方法,用printf("%-*s", k, file[i]),查过资料后发现*放到转换字符之间可以当作替代符,后面可以输入一个变量(如k)来控制,这句代码意思是输出左对齐(对应负号)的宽度为k(对应*)的字符串file[i]。
代码:
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <algorithm> using namespace std; const int maxn = 101; int n; int main() { string file[maxn]; int cmax; while (scanf("%d", &n) != EOF) { printf("------------------------------------------------------------\n"); cmax = 0; for (int i = 0; i < n; i++) { cin >> file[i]; cmax = max(cmax, (int)file[i].size()); } int col = 62 / (cmax + 2); int row = ceil(1.0 * n / col); sort (file, file + n); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { // printf("%s", file[i * row + j]); int t = j * row + i; if (t >= n) continue; cout << file[t]; int k = cmax - file[t].size(); while (k--) printf(" "); if (j != col - 1) printf(" "); } if (i <= row - 1) printf("\n"); } } return 0; }
相关文章推荐
- uva 400 Unix ls 文件输出排版 排序题
- uva 400 Unix ls 文件输出排版 排序题
- UVa 400 Unix ls (字符串排序&规格化输出)
- UVa 400 Unix ls(排序+输出控制)
- UVa--400 Unix ls(格式输出)
- Uva400 Unix ls 【排序+技巧】【例5-8】
- UVa——400Unix ls(字典序文本处理输出iomanip)
- uva400 unix ls (字符串 排序)
- UVA 400 (暑假-排序、检索(2)-F- Unix ls)
- [UVA400]Unix ls[格式输出]
- UVa 400 Unix ls 命令
- UVA400-Unix的ls命令
- UVA 400 - Unix ls
- UVa 400 - Unix ls
- UVA400 Unix ls
- UVa400 Unix ls
- uva 400 Unix ls(借助printf("%*s",int, char*);控制格式)
- UVA 400-Unix ls【字符串】
- UVa_400 - Unix ls
- ls按时间排序输出文件列表