#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
static const char* filename = "roman2.txt";
typedef std::vector<std::string> stringv;
namespace stv {
stringv& split( stringv& v, std::string& src, char delim = ','){
std::istringstream iss(src);
std::string temp;
while( std::getline(iss,temp,delim) ){
v.push_back(temp);
}
}
stringv split( std::string& src, char delim = ','){
stringv lv;
return split(lv,src,delim);
}
template <typename value_type>
struct joinf {
value_type& val_;
value_type& delim_;
joinf( value_type& val, value_type& delim ) : val_(val), delim_(delim) {}
void operator ()( value_type& val ){ val_ += ( val + delim_ ); }
};
std::string& join( std::string& s, stringv& v, const char* delim = ", "){
std::string sdelim(delim);
joinf<std::string> j(s,sdelim);
std::for_each(v.begin(),v.end(), j);
return j.val_;
}
std::string join( stringv& v, const char* delim = ", "){
std::string lv;
return join(lv,v,delim);
}
}
int main(void)
{
using namespace std;
cout << "郵便番号を入力してください" << endl;
string bango; cin >> bango;
ifstream ifs( filename, ios::in );
if( ifs.fail() ){
cout << "ファイルを開けませんでした。:" << filename << endl;
return 0;
}
stringv v;
string temp;
bool found = false;
while( !found && std::getline(ifs,temp) ){
v.clear();
stv::split(v,temp,'\t');
found = ( v.at(1) == bango );
}
ifs.close();
cout << ( found ? stv::join(v,", ") : "見つかりませんでした。" )
<< endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGZzdHJlYW0+CiNpbmNsdWRlPHNzdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxhbGdvcml0aG0+CgpzdGF0aWMgY29uc3QgY2hhciogZmlsZW5hbWUgPSAicm9tYW4yLnR4dCI7Cgp0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmd2OwoKbmFtZXNwYWNlIHN0diB7CiAgICBzdHJpbmd2JiBzcGxpdCggc3RyaW5ndiYgdiwgc3RkOjpzdHJpbmcmIHNyYywgY2hhciBkZWxpbSA9ICcsJyl7CiAgICAgICAgc3RkOjppc3RyaW5nc3RyZWFtIGlzcyhzcmMpOwogICAgICAgIHN0ZDo6c3RyaW5nIHRlbXA7CiAgICAgICAgd2hpbGUoIHN0ZDo6Z2V0bGluZShpc3MsdGVtcCxkZWxpbSkgKXsKICAgICAgICAgICAgdi5wdXNoX2JhY2sodGVtcCk7CiAgICAgICAgfQogICAgfQoKICAgIHN0cmluZ3Ygc3BsaXQoIHN0ZDo6c3RyaW5nJiBzcmMsIGNoYXIgZGVsaW0gPSAnLCcpewogICAgICAgIHN0cmluZ3YgbHY7CiAgICAgICAgcmV0dXJuIHNwbGl0KGx2LHNyYyxkZWxpbSk7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIHZhbHVlX3R5cGU+CiAgICBzdHJ1Y3Qgam9pbmYgewogICAgICAgIHZhbHVlX3R5cGUmIHZhbF87CiAgICAgICAgdmFsdWVfdHlwZSYgZGVsaW1fOwogICAgICAgIGpvaW5mKCB2YWx1ZV90eXBlJiB2YWwsIHZhbHVlX3R5cGUmIGRlbGltICkgOiB2YWxfKHZhbCksIGRlbGltXyhkZWxpbSkge30KICAgICAgICB2b2lkIG9wZXJhdG9yICgpKCB2YWx1ZV90eXBlJiB2YWwgKXsgdmFsXyArPSAoIHZhbCArIGRlbGltXyApOyB9CiAgICB9OwoKICAgIHN0ZDo6c3RyaW5nJiBqb2luKCBzdGQ6OnN0cmluZyYgcywgc3RyaW5ndiYgdiwgY29uc3QgY2hhciogZGVsaW0gPSAiLCAiKXsKICAgICAgICBzdGQ6OnN0cmluZyBzZGVsaW0oZGVsaW0pOwogICAgICAgIGpvaW5mPHN0ZDo6c3RyaW5nPiBqKHMsc2RlbGltKTsKICAgICAgICBzdGQ6OmZvcl9lYWNoKHYuYmVnaW4oKSx2LmVuZCgpLCBqKTsKICAgICAgICByZXR1cm4gai52YWxfOwogICAgICAgIAogICAgfQoKICAgIHN0ZDo6c3RyaW5nIGpvaW4oIHN0cmluZ3YmIHYsIGNvbnN0IGNoYXIqIGRlbGltID0gIiwgIil7CiAgICAgICAgc3RkOjpzdHJpbmcgbHY7CiAgICAgICAgcmV0dXJuIGpvaW4obHYsdixkZWxpbSk7CiAgICB9Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICAgY291dCA8PCAi6YO15L6/55Wq5Y+344KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIiA8PCBlbmRsOwoKICAgIHN0cmluZyBiYW5nbzsgY2luID4+IGJhbmdvOwoKICAgIGlmc3RyZWFtIGlmcyggZmlsZW5hbWUsIGlvczo6aW4gKTsKCiAgICBpZiggaWZzLmZhaWwoKSApewogICAgICAgIGNvdXQgPDwgIuODleOCoeOCpOODq+OCkumWi+OBkeOBvuOBm+OCk+OBp+OBl+OBn+OAgjoiIDw8IGZpbGVuYW1lIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgc3RyaW5ndiB2OwogICAgc3RyaW5nIHRlbXA7CiAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICB3aGlsZSggIWZvdW5kICYmIHN0ZDo6Z2V0bGluZShpZnMsdGVtcCkgKXsKICAgICAgICB2LmNsZWFyKCk7CiAgICAgICAgc3R2OjpzcGxpdCh2LHRlbXAsJ1x0Jyk7CiAgICAgICAgZm91bmQgPSAoIHYuYXQoMSkgPT0gYmFuZ28gKTsKICAgIH0KICAgIGlmcy5jbG9zZSgpOwogICAgCiAgICBjb3V0IDw8ICggZm91bmQgPyBzdHY6OmpvaW4odiwiLCAiKSA6ICLopovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgIIiICkKICAgICAgICAgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==