#include <iostream>
#include <sstream>
#include <cstdlib>
#include <vector>
#include <map>
struct Phone {
std::string type;
std::string color;
int price;
};
std::vector<Phone> parsePhoneFromString(const std::string& s);
int main()
{
std::string lineIn = "Lt36/tim3080,d3000,t3010,lt35/2870,mt35/d1915,t1920,"
"lt29/1905,lt28h/d1810,h1790,lt25/t1810,lt26ii/t1920,"
"d1910,lt26w/1340,lt26i/t1740,d1730,lt22/d1420,h1370,"
"b1370,s36h/1380";
auto phones = parsePhoneFromString(lineIn);
for (auto& phone : phones)
std::cout << phone.type << " "
<< phone.color << " "
<< phone.price << "\n";
}
std::vector<Phone> parsePhoneFromString(const std::string& s)
{
//cần thêm -std=c++11 vào compiler flags
static std::map<std::string,std::string> colorMap = {
{"t","trắng"}, {"h","hồng"},{"b","bạc"}, {"tim", "tím"},
{"","đen"}, {"d","đen"} //ai chạy windows thì bỏ dấu đi
};
std::istringstream iss(s);
Phone phone;
std::string temp;
std::vector<Phone> result;
while (getline(iss,temp,','))
{
size_t islash = temp.find('/');
if (islash!=temp.npos) {
phone.type = temp.substr(0,islash);
temp = temp.substr(islash+1);
}
size_t idigit = 0;
while (!isdigit(temp[idigit])) ++idigit;
phone.color = colorMap.at(temp.substr(0,idigit));
phone.price = atoi(temp.substr(idigit).c_str());
result.push_back(phone);
}
return result;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXA+CgpzdHJ1Y3QgUGhvbmUgewogICAgc3RkOjpzdHJpbmcgdHlwZTsKICAgIHN0ZDo6c3RyaW5nIGNvbG9yOwogICAgaW50IHByaWNlOwp9OwoKc3RkOjp2ZWN0b3I8UGhvbmU+IHBhcnNlUGhvbmVGcm9tU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKTsKCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmcgbGluZUluID0gIkx0MzYvdGltMzA4MCxkMzAwMCx0MzAxMCxsdDM1LzI4NzAsbXQzNS9kMTkxNSx0MTkyMCwiCiAgICAgICAgICAgICAgICAgICAgICAgICAibHQyOS8xOTA1LGx0MjhoL2QxODEwLGgxNzkwLGx0MjUvdDE4MTAsbHQyNmlpL3QxOTIwLCIKICAgICAgICAgICAgICAgICAgICAgICAgICJkMTkxMCxsdDI2dy8xMzQwLGx0MjZpL3QxNzQwLGQxNzMwLGx0MjIvZDE0MjAsaDEzNzAsIgogICAgICAgICAgICAgICAgICAgICAgICAgImIxMzcwLHMzNmgvMTM4MCI7CiAgICBhdXRvIHBob25lcyA9IHBhcnNlUGhvbmVGcm9tU3RyaW5nKGxpbmVJbik7CiAgICBmb3IgKGF1dG8mIHBob25lIDogcGhvbmVzKQogICAgICAgIHN0ZDo6Y291dCA8PCBwaG9uZS50eXBlIDw8ICIgICIKICAgICAgICAgICAgICAgICAgPDwgcGhvbmUuY29sb3IgPDwgIiAgIgogICAgICAgICAgICAgICAgICA8PCBwaG9uZS5wcmljZSA8PCAiXG4iOwp9CgoKc3RkOjp2ZWN0b3I8UGhvbmU+IHBhcnNlUGhvbmVGcm9tU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQp7ICAgCiAgICAvL2PhuqduIHRow6ptIC1zdGQ9YysrMTEgdsOgbyBjb21waWxlciBmbGFncwogICAgc3RhdGljIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLHN0ZDo6c3RyaW5nPiBjb2xvck1hcCA9IHsgCiAgICAgICAgeyJ0IiwidHLhuq9uZyJ9LCB7ImgiLCJo4buTbmcifSx7ImIiLCJi4bqhYyJ9LCB7InRpbSIsICJ0w61tIn0sCiAgICAgICAgeyIiLCLEkWVuIn0sIHsiZCIsIsSRZW4ifSAgLy9haSBjaOG6oXkgd2luZG93cyB0aMOsIGLhu48gZOG6pXUgxJFpCiAgICB9OwogICAgc3RkOjppc3RyaW5nc3RyZWFtIGlzcyhzKTsKICAgIFBob25lIHBob25lOwogICAgc3RkOjpzdHJpbmcgdGVtcDsKICAgIHN0ZDo6dmVjdG9yPFBob25lPiByZXN1bHQ7CgogICAgd2hpbGUgKGdldGxpbmUoaXNzLHRlbXAsJywnKSkKICAgIHsKICAgICAgICBzaXplX3QgaXNsYXNoID0gdGVtcC5maW5kKCcvJyk7CiAgICAgICAgaWYgKGlzbGFzaCE9dGVtcC5ucG9zKSB7CiAgICAgICAgICAgIHBob25lLnR5cGUgPSB0ZW1wLnN1YnN0cigwLGlzbGFzaCk7CiAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnN1YnN0cihpc2xhc2grMSk7CiAgICAgICAgfQogICAgICAgIHNpemVfdCBpZGlnaXQgPSAwOwogICAgICAgIHdoaWxlICghaXNkaWdpdCh0ZW1wW2lkaWdpdF0pKSArK2lkaWdpdDsKICAgICAgICBwaG9uZS5jb2xvciA9IGNvbG9yTWFwLmF0KHRlbXAuc3Vic3RyKDAsaWRpZ2l0KSk7CiAgICAgICAgcGhvbmUucHJpY2UgPSBhdG9pKHRlbXAuc3Vic3RyKGlkaWdpdCkuY19zdHIoKSk7CiAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhwaG9uZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9