您的位置:首页 > 编程语言

uva1593代码对齐

2017-10-09 21:20 344 查看
题目是要输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要有空一格。每个单词不超过80个字符,每行不超过180个字符,一共1000多行

输入:

start: integer; // begins here

stop: integer; // ends here

s: string;

c: char; // temp

输出:

start: integer; // begins here

stop: integer; // ends here

s: string;

c: char; // temp

思路:先把单词一个个抽出来,然后记录下每个位置最长的单词,然后不足长度的加空格再输出,注意:最后一个单词没有空格

输出的话,就先将字符标准化,添加空格,使其和最长的字符位数相同。

#include <set>
#include <numeric>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cctype>
#include <string>
#include <sstream>
#include <map>
#include <functional>

using namespace std;

typedef long long LL;

#define REP(idx1,num1) for(int idx1=0;idx1<(num1);idx1++)

string s[1100][2000];
int len[2000];
int len2[2000];//第i组有多少个单词
int main()
{
//freopen("/Users/user/Desktop/1.txt","r",stdin);

memset(len,0,sizeof(len));
int i = 0;
string tmp;
while(getline(cin,tmp))
{
stringstream ss(tmp);
string tmp2;
int cnt = 0;//第几个单词
while(ss >> tmp2)
{
//cout << tmp2 << endl;
int len_tmp = tmp2.length();
len[cnt] = max(len[cnt],len_tmp+1);
s[i][cnt++] = tmp2;
}
len2[i] = cnt;
i++;
}
i--;//多少组
for(int l = 0; l <= i; l++)//第l组
{
for(int j = 0; j < len2[l]; ++j)//第j个
{
if(j == len2[l] -1)
{
cout <<s[l][j];
break;
}
string sss = s[l][j];
for(int m = s[l][j].size(); m < len[j]; m++)
{
sss += " ";
}
cout << sss;
}
cout << endl;
}
return 0;
}

题目是要输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要有空一格。每个单词不超过80个字符,每行不超过180个字符,一共1000多行
输入:
start:  integer;    // begins here
stop: integer; //  ends here
s:  string;
c:   char; // temp
输出:
start:    integer;    //   begins   here
stop:     integer;    //   ends     here
s:        string;
c:        char;       //   temp
思路:先把单词一个个抽出来,然后记录下每个位置最长的单词,然后不足长度的加空格再输出,注意:最后一个单词没有空格
输出的话,就先将字符标准化,添加空格,使其和最长的字符位数相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: