Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我认输,我连char talbe出现"*"都考虑了还过不了,哪位大大救救我,哭求(附程序)

Posted by bluemiles at 2004-10-08 09:54:33 on Problem 1891
#include<iostream>
#include<vector>
#include<map>
#include<string>
#include<sstream>
using namespace std;

int curfont;
int l, w;
int cursize;
int spacesize;
int spacefont;
int fontsize;
int trailing;
string first;
string last;
bool islast;
int linecnt;	int curw = 0;
int curl = 1;

int tempwidth;
int pcnt;
map<char, vector<int> > chartable;
int getwidth(char c)
{
	int unit;
	
	if(c == ' ')
	{
		unit = chartable[c].at(spacefont -1);
		unit = unit * spacesize * 2 / 10;
	}
	else
	{
		unit = chartable[c][curfont - 1];
		unit = unit * cursize * 2 / 10;
	}

	unit = unit / 2 + unit % 2;
	return unit;
}
int getwidth(string & s)
{
	int unit = 0;
	for(int i = 0; i < s.length(); i ++)
		unit += getwidth(s.at(i));
	return unit;
}
void print()
{
	cout << "Line " << linecnt << ": " << first;
	if(trailing >= 0)
		cout << " ... " << last;
	cout << " (" << trailing << " whitespace)" << endl;
}
void put(string token)
{
	int tempwidth = getwidth(token);
	if(curw == 0)
	{
		curw = tempwidth;
		first = last = token;
	}
	else{
		int tempwidth2 = tempwidth + getwidth(' ');
		if(curw + tempwidth2 > w)
		{
			linecnt ++;
			trailing = w - curw;
			print();
			curw = tempwidth;
			first = last = token;
		}
		else{
			curw += tempwidth2;
			last = token;
		}
	}
	spacesize = cursize;
	spacefont = curfont;
}
int main()
{
	int num;
	cin >> num;
	int i;
	char tempc;
	int tempi;
	string line;
	//string token;
	getline(cin , line);
	for(i = 0; i < num; i ++)
	{
		getline(cin, line);
		istringstream is(line);
		vector<int> units;
		is.get(tempc);
		for(int j = 0; j < 6; j ++)
		{
			is >> tempi;
			units.push_back(tempi);
		}
		chartable.insert(make_pair(tempc, units));


	}
	cin >> l >> w;
	pcnt = 0;
	while(l != 0)

	{
		getline(cin, line);
		spacefont = curfont = 1;
		spacesize = cursize = 10;
		linecnt = 0;
		pcnt ++;
		curw = 0;
		cout << "Paragraph " << pcnt << endl;
		for(i = 0; i < l; i ++)
		{
			string token;
			getline(cin , line);
			istringstream is(line);
			while(is >> token)
			{
				if(token.at(0) == '*'  && token.size() >2 && (token.at(1) == 'f' || token.at(1) == 's'))
				{
					bool pass = true;
					if(token.at(1) == 'f')
					{
						if(token.size() > 3 || token.at(2) <= '0' || token.at(2) > '6')
							pass = false;
					}
					else if(token.at(1) == 's')
					{
						
						for(int k = 2; k < token.length(); k ++)
						{
							if(token.at(2) == '0' ||token.at(k) < '0' || token.at(k) > '9' || k > 3)
							{
								pass = false;
								break;
							}
						}
					}
					
					if(pass){
						istringstream is(token);
						is >> tempc;
						is >> tempc;
						is >> tempi;
						if(tempc == 'f')
							curfont = tempi;
						else if(tempc == 's')
							cursize = tempi;
						continue;
					}


				}

				put(token);

			}
		}
		trailing = w - curw;
		linecnt ++;
		print();
		cin >> l >> w;
	}

}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator