习题5-1 uva593代码对齐(最后单词无空格!!!)

这题 就是开个string 就没啥了
怎么对齐呢,开个数组 ,保存每一列的单词长度最大值,
输出 用个自动补齐空格的函数(手写啊)曾刘大大用过默默记住了 -
只要行列不乱都好说
上代码

#include <bits/stdc++.h>
using namespace std;
string str[1005][200];
int    len[1005][200];
int maxn[200],chang[1005];
void print(string s, int n, char c) //自动补空格 
{
	int l = s.size();
	for (int i = 0; i < n ;i++)
	{
		if(i < l) cout<<s[i];
		else cout<<c;
	}
}
int main()
{
	string s;
	int n = 0, MA = 0;
	while(getline(cin,s))
	{
		int z = 0;
		stringstream ss(s);  // 读每行单词专用流 
		while(ss >> str[n][z])
		{
			len[n][z] = str[n][z].size(); //单词长度	
			z++;
		}
		chang[n++] = z;  //单词个数 
		MA = max(z,MA);
	}
	for (int i = 0; i < MA; i++) //最多的单词个数
	{
		for (int j = 0; j < n; j++)
		{
			if(i >= chang[j]) continue; // 超过其行的单词个数就算了 
			else maxn[i] = max(maxn[i],len[j][i]); 
		}
	} 
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < chang[i]; j++)
		{
			if(j) printf(" ");
			if(j != chang[i]-1) print(str[i][j],maxn[j],' ');
			else cout<<str[i][j];
		}
		printf("\n");
	} 
	  return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值