uva400 unix ls (字符串 排序)

题意: 模仿 unix的ls命令。 对输入的文件名进行字典序排序, 然后按列优先输出。 除了最后一列, 每列的宽度是所有文件名中最长的那个字符数 + 2。

思路: 用sort()函数(要把字符串封装进结构体里面, 或者用string)把 文件名排序下就行了。 然后根据maxLen 去确定colNum, 根据这个条件:每行最多60个字符。


算法复杂度: o(n)


#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define MAX_CHAR 60
#define MAX_N 110
const char *line = "------------------------------------------------------------";

struct filename
{
	char name[MAX_CHAR];
};

int cmp(const filename &a, const filename &b)
{
	int rslt = strcmp(a.name, b.name);
	if (rslt < 0) {
		return true;
	} else {
		return false;
	}
}

int main()
{
	int n;
	while (scanf("%d%*c", &n) == 1) {
		filename file[MAX_N];
		memset(file, 0, sizeof(file));

		// enter
		int max = -1;
		for (int i = 0; i < n; i++) {
			scanf("%s", file[i].name);
			int len = strlen(file[i].name);
			if (len > max) {
				max = len;
			}
		}
		
		// sort
		sort(file, file + n, cmp);

		int col = (MAX_CHAR + 2) / (max + 2);
		int row = (n - 1) / col + 1;

		// output
		puts(line);
		for (int r = 0; r < row; r++) {
			for (int c = 0; c < col; c++) {
				if (r + c*row < n) {
					printf("%-*s", max + 2, file[r + c * row].name);
				}
			}
			printf("\n");
		}

	}

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值