Мазмунга өтүү

Текстти иштетүү: саптар, агымдар жана регулярдык туюнтмалар

Сабактын башталышы

Текстти иштетүү: саптар, агымдар жана регулярдык туюнтмалар

C++ стандарттык китепканасы менен текстти кесүү, талдоо, чогултуу жана текшерүү

Негизги идея: дээрлик ар бир чыныгы программа текстти жутуп, текст чыгарат: конфигурация файлдары, CSV саптары, лог жазуулары, колдонуучунун киргизүүсү, тармак билдирүүлөрү. 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 чакыруу өзгөчө абалды ыргытат.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө