Текстти иштетүү: саптар, агымдар жана регулярдык туюнтмалар
C++ стандарттык китепканасы менен текстти кесүү, талдоо, чогултуу жана текшерүү
std::string символдорду сактайт жана оңдойт. std::stringstream текстти типтелген маанилерге жана кайра айландырат. std::regex үлгүлөрдү сүрөттөйт жана дал келтирет. Чогуу алар сапты бөлүүгө, санды сууруп алууга жана почта дареги туура көрүнөрүн ырастоого мүмкүндүк берет — сырой char* ка да, кол менен жазылган талдоочу циклге да тийбестен.
std::stringнин мүчө функциялары менен текстти издөө, кесүү жана кайра чогултуу,- боштук жана бөлгүч менен ажыратылган талааларды
std::istringstreamменен талдоо жанаstd::ostringstreamменен чыгарууну чогултуу, std::regexүлгүлөрүн жазуу жанаregex_match,regex_searchжанаregex_replaceортосунан тандоо,- дал келүүдөн кармалган топторду сууруп алуу жана чыныгы киргизүүнү коопсуз текшерүү.
1. std::string: издөө, кесүү, кайра чогултуу
Сиз std::string менен башталгыч курста «символдордун контейнери» катары таанышкансыз. Бул деңгээлде аны <string> башкы файлынан алынган бай, индекске негизделген API бар чыныгы ырааттуулук катары билүү пайдалуу. Күнүмдүк иштин көбүн үч операция аткарат: find, substr жана replace / append.
s.find("x")биринчи жолугуунун индексин кайтарат, же ал жок болсо атайын туруктууstd::string::nposту кайтарат. Ар дайымnposменен салыштырыңыз,-1менен эмес.s.substr(pos, len)posтон көчүрүлгөн жаңы сапты кайтарат; эгерlenту калтырсаңыз, аягына чейин барат.s.replace(pos, len, repl),s.insert(pos, txt),s.erase(pos, len)жанаs += "..."сапты ордунда оңдойт.s.size()(length()менен бирдей),s.empty(), текшерүүсүз кирүү үчүнs[i]жана чек текшерилген кирүү үчүнs.at(i), алstd::out_of_rangeту ыргытат.
std::string path = "report.final.csv";
std::size_t dot = path.rfind('.'); // ОҢ жактан издөө
std::string ext = (dot == std::string::npos)
? ""
: path.substr(dot + 1); // "csv"
rfind ка көңүл буруңуз: ал акыркы чекитти табат, файлдын кеңейтмеси үчүн так ушул керек. npos ту текшерүү милдеттүү эмес деп ойлобоңуз: жараксыз позиция менен substr чакыруу өзгөчө абалды ыргытат.