// ask for a person's name, and greet the person
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::string;
int main()
{
// fetch name
cout << "Please enter your first name: ";
string name;
cin >> name;
// message
const string greeting = "Hello, " + name + "!";
// padding
const int pad = 1;
//desired rows/columns
const int rows = pad * 2 + 3;
const string::size_type cols = greeting.size() + pad * 2 + 2;
// seperate output from input
cout << std::endl;
// invariants
int r = 0;
while (r != rows) {
string::size_type c = 0;
while(c != cols) {
if (r == 0 || r == rows -1 || c == 0 || c == cols -1) { // if in bordering column or row
cout << "*"; //output *
} else {
if (r == pad + 1 && c == pad + 1) { //if on row for greeting
cout << greeting; // write greeting
c += (greeting.size()-1); // adjust invariant
} else {
cout << " ";
}
}
++c;
}
++r;
cout << std::endl;
}
return 0;
}
Ly8gYXNrIGZvciBhIHBlcnNvbidzIG5hbWUsIGFuZCBncmVldCB0aGUgcGVyc29uCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIHN0ZDo6Y291dDsKdXNpbmcgc3RkOjpjaW47CnVzaW5nIHN0ZDo6c3RyaW5nOwoKaW50IG1haW4oKQp7Ci8vIGZldGNoIG5hbWUKY291dCA8PCAiUGxlYXNlIGVudGVyIHlvdXIgZmlyc3QgbmFtZTogIjsKc3RyaW5nIG5hbWU7CmNpbiA+PiBuYW1lOwoKLy8gbWVzc2FnZQpjb25zdCBzdHJpbmcgZ3JlZXRpbmcgPSAiSGVsbG8sICIgKyBuYW1lICsgIiEiOwovLyBwYWRkaW5nCmNvbnN0IGludCBwYWQgPSAxOwovL2Rlc2lyZWQgcm93cy9jb2x1bW5zCmNvbnN0IGludCByb3dzID0gcGFkICogMiArIDM7CmNvbnN0IHN0cmluZzo6c2l6ZV90eXBlIGNvbHMgPSBncmVldGluZy5zaXplKCkgKyBwYWQgKiAyICsgMjsKLy8gc2VwZXJhdGUgb3V0cHV0IGZyb20gaW5wdXQKY291dCA8PCBzdGQ6OmVuZGw7Ci8vIGludmFyaWFudHMKaW50IHIgPSAwOwoKCndoaWxlIChyICE9IHJvd3MpIHsKICAgIHN0cmluZzo6c2l6ZV90eXBlIGMgPSAwOwogICAgd2hpbGUoYyAhPSBjb2xzKSB7CiAgICAgICAgaWYgKHIgPT0gMCB8fCByID09IHJvd3MgLTEgfHwgYyA9PSAwIHx8IGMgPT0gY29scyAtMSkgeyAvLyBpZiBpbiBib3JkZXJpbmcgY29sdW1uIG9yIHJvdwogICAgICAgICAgICBjb3V0IDw8ICIqIjsgICAvL291dHB1dCAqCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHIgPT0gcGFkICsgMSAmJiBjID09IHBhZCArIDEpIHsgLy9pZiBvbiByb3cgZm9yIGdyZWV0aW5nCiAgICAgICAgICAgICAgICBjb3V0IDw8IGdyZWV0aW5nOyAvLyB3cml0ZSBncmVldGluZwogICAgICAgICAgICAgICAgYyArPSAoZ3JlZXRpbmcuc2l6ZSgpLTEpOyAvLyBhZGp1c3QgaW52YXJpYW50CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICIgIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICArK2M7CiAgICB9CiAgICArK3I7CiAgICBjb3V0IDw8IHN0ZDo6ZW5kbDsKfQoKcmV0dXJuIDA7Cn0=