UVA- 1593 - Alignment of Code

本文介绍了一种文本处理算法,该算法能够将输入的多行文本中的单词按列对齐输出,通过记录每列单词的最大长度并进行空格填充实现。使用了C++语言和vector容器、stringstream来简化字符串处理过程。

原命题链接:PDF/Vjudge

题目的意思是,把每个单词的头部对整齐然后输出,不足时用空格补齐,特别的是,最后一个单词不论长度差,仅仅输出就好。

思路如下:

可以有一个数组储存第n个单词的最大长度,然后让待输出的单词后方补齐空格。

使用vector来储存每一行的句子,和句子中的每一个单词(实际是需要用空格隔开的字符串),因为每一行的句子中有空格,所以注意要使用getline来读取,读取后处理的时候,可以使用streamstring来把句子转换成流输入的形式,默认是空白符断开,然后储存到vector里面,这样操作就简洁了许多。

下面是代码实现:

#include <bits/stdc++.h>


using namespace std;


int main()
{
	//freopen("t.txt", "w", stdout);
	int maxlen[500] = { 0 }, num = 0;//maxlen是某一位单词的最大长度
	vector <string> out[5000];
	string in;
	while (getline(cin, in))
	{
		int cnt = 0;
		string temp;
		vector <string> restore;
		stringstream ss(in);//将输入in转换
		while(ss >> temp)
		{
			//cout << temp << endl;
			restore.push_back(temp);//将单词压入vector
			int length = temp.size();
			maxlen[cnt] = max(maxlen[cnt], length);//计算第cnt位单词的最大长度
			cnt++;
		}
		out[num++] = restore;
	}
	for (int i = 0; i < num; i++)
	{
		for (unsigned int j = 0; j < out[i].size(); j++)
		{
			cout << out[i][j];
			if (j == out[i].size() - 1)//每一行最后一个单词
				break;
			unsigned int len = maxlen[j] - out[i][j].size();
			while (len--)
				cout << " ";
			cout << " ";
		}
		cout << endl;
	}
	//system("pause");
	return 0;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值