239 lines
6.5 KiB
C++
Raw Normal View History

2025-03-29 23:02:48 +08:00
#include <iostream>
#include <string>
#include <vector> //<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
#include <list>
#include <algorithm>
#include <cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::max;
vector<string> split(const string& s) { //<2F>ָ<EFBFBD><D6B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>ָ<EFBFBD><D6B8>ɵ<EFBFBD><C9B5>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><E6B4A2>vector<string><3E><>
vector<string> ret;
typedef string::size_type string_size;
string_size i = 0;
while (i != s.size()) {
//<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD>εĿհף<D5B0>[<5B><>ǰ<EFBFBD><C7B0>i,i)<29><>ȫ<EFBFBD><C8AB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ǿո<C7BF>
while (i != s.size() && isspace(s[i])) {
i++;
}
//<2F>ҳ<EFBFBD><D2B3><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ս<EFBFBD><D5BD><EFBFBD>
string_size j = i;
//[<5B><>ǰ<EFBFBD><C7B0>j,j)<29>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿո<C7BF>
while (j != s.size() && !isspace(s[j])) {
j++;
}
//<2F>ҵ<EFBFBD><D2B5><EFBFBD>һЩ<D2BB>ǿհ׷<D5B0>
if (i != j) {
ret.push_back(s.substr(i, j - i));
i = j;
}
}
return ret;
}
//<2F>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
string::size_type width(const vector<string>& v) { //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
string::size_type maxlen = 0;
for (vector<string>::size_type i = 0; i != v.size(); ++i) {
maxlen = max(maxlen, v[i].size());
}
return maxlen;
}
vector<string> frame(const vector<string>& v) {
vector<string> ret;
string::size_type maxlen = width(v); //<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>
string border(maxlen + 4, '*');
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>У<EFBFBD>ÿ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ǻź<C7BA>һ<EFBFBD><D2BB><EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ret.push_back(border);
//ʹ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
vector<string>::const_iterator iter = v.begin();
while (iter != v.end()) { //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
ret.push_back("* " + (*iter) + string(maxlen - iter->size(), ' ') + " *");
iter++;
}
ret.push_back(border);
return ret;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<string> vcat(const vector<string>& top, const vector<string>& bottom) {
vector<string> ret = top;
ret.insert(ret.end(), bottom.begin(), bottom.end());
return ret;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<string> hcat(const vector<string>& left, const vector<string>& right) {
vector<string>ret;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
string::size_type width1 = width(left) + 1;
//<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>left<66><74>right<68><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ʹ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
vector<string>::const_iterator i, j;
i = left.begin();
j = right.begin();
while (i != left.end() || j != right.end()) {
string s;
if (i != left.end()) {
s = *i++;
}
s += string(width1 - s.size(), ' ');
if (j != right.end()) {
s += *j++;
}
ret.push_back(s);
}
return ret;
}
int main(int argc, const char* argv[]) {
string s;
while (getline(cin, s)) {
vector<string> v = split(s);
vector<string> fra = frame(v); //<2F><><EFBFBD><EFBFBD>frame<6D>Էָ<D4B7><D6B8><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
vector<string> col, row;
col = vcat(v, fra);
row = hcat(v, fra); //ͨ<><CDA8>hcat<61><74><EFBFBD>ָ<EFBFBD><D6B8>ı<EFBFBD><C4B1>Ϳ<EFBFBD><CDBF>ܻ<EFBFBD><DCBB>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>
for (vector<string>::size_type j = 0; j != row.size(); ++j) {
cout << row[j] << endl;
}
}
return 0;
}
#include <iostream> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include <string> // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
#include <vector> // <20><><EFBFBD>붯̬<EBB6AF><CCAC><EFBFBD>飨vector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include <list> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣨δʹ<CEB4>ã<EFBFBD>
#include <algorithm> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3A8><EFBFBD><EFBFBD>std::max<61><78>
#include <cctype> // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3A8><EFBFBD><EFBFBD>std::isspace<63><65>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::max;
// <20><><EFBFBD>ո<EFBFBD><D5B8>ָ<EFBFBD><D6B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>طָ<D8B7><D6B8><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<string> split(const string& s) {
vector<string> ret; // <20><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
typedef string::size_type string_size; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
string_size i = 0;
while (i != s.size()) {
// <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
while (i != s.size() && isspace(s[i])) {
i++;
}
// <20>ҵ<EFBFBD><D2B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ʵĽ<CAB5><C4BD><EFBFBD>λ<EFBFBD><CEBB>
string_size j = i;
while (j != s.size() && !isspace(s[j])) {
j++;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (i != j) {
ret.push_back(s.substr(i, j - i)); // <20><>ȡ<EFBFBD><C8A1><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
i = j; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
}
}
return ret;
}
// <20>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
string::size_type width(const vector<string>& v) {
string::size_type maxlen = 0; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>Ϊ0
for (vector<string>::size_type i = 0; i != v.size(); ++i) {
maxlen = max(maxlen, v[i].size()); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
}
return maxlen;
}
// Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF>ܣ<EFBFBD><DCA3>߿<EFBFBD><DFBF><EFBFBD>
vector<string> frame(const vector<string>& v) {
vector<string> ret; // <20><EFBFBD><E6B4A2><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
string::size_type maxlen = width(v); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string border(maxlen + 4, '*'); // <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF>ַ<EFBFBD><D6B7><EFBFBD>
ret.push_back(border); // <20><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>߿<EFBFBD>
vector<string>::const_iterator iter = v.begin();
while (iter != v.end()) {
// ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ߿<D2B1><DFBF><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ret.push_back("* " + (*iter) + string(maxlen - iter->size(), ' ') + " *");
iter++;
}
ret.push_back(border); // <20><><EFBFBD>ӵײ<D3B5><D7B2>߿<EFBFBD>
return ret;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<string> vcat(const vector<string>& top, const vector<string>& bottom) {
vector<string> ret = top; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ret.insert(ret.end(), bottom.begin(), bottom.end()); // <20><><EFBFBD>ӵײ<D3B5><D7B2><EFBFBD><EFBFBD><EFBFBD>
return ret;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<string> hcat(const vector<string>& left, const vector<string>& right) {
vector<string> ret;
string::size_type width1 = width(left) + 1; // Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ո<EFBFBD><D5B8>Ŀ<EFBFBD><C4BF><EFBFBD>
vector<string>::const_iterator i = left.begin(), j = right.begin();
// ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (i != left.end() || j != right.end()) {
string s;
if (i != left.end()) {
s = *i++; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
}
s += string(width1 - s.size(), ' '); // <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>Զ<EFBFBD><D4B6><EFBFBD>
if (j != right.end()) {
s += *j++; // <20><><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>ַ<EFBFBD><D6B7><EFBFBD>
}
ret.push_back(s); // <20><>ƴ<EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
}
return ret;
}
int main(int argc, const char* argv[]) {
string s;
while (getline(cin, s)) {
// <20><><EFBFBD>ո<EFBFBD><D5B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
vector<string> v = split(s);
// Ϊ<>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>
vector<string> fra = frame(v);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF>ܻ<EFBFBD><DCBB>ַ<EFBFBD><D6B7><EFBFBD>
vector<string> col = vcat(v, fra);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF>ܻ<EFBFBD><DCBB>ַ<EFBFBD><D6B7><EFBFBD>
vector<string> row = hcat(v, fra);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA>Ľ<EFBFBD><C4BD><EFBFBD>
for (vector<string>::size_type j = 0; j != row.size(); ++j) {
cout << row[j] << endl;
}
}
return 0;
}