char *ptr;char *Delitemes= ",\n"; ptr = strtok(f, Delitemes);while (ptr != NULL) { ptr= strtok(NULL, Delitemes); // заносим данные}
#include <iostream>#include <string> using str = std::string; // определяет регистр буквenum eCASE { eLOWER = 1<<1, eUPPER =1<<2, eMIXED = 1<<3 };eCASE checkCase(const char* data, const size_t length); // указатель на функцию-обработчик токенаtypedef void callback(const char* data, const size_t length); // вычленяет из текста токены (слова), // и передает их для дальнейшего анализаvoid tokenize(callback func, const str& text, const str& delimiters = " ", bool trimEmpty = false); // функция анализирует обнаруженное словоvoid analyze(const char* data, const size_t length); int main(){ std::cout << "Hello, world!\n"; // токенайзер обнаружит все токены // и передаст анализатору каждый из них tokenize(analyze, "HELLO hello Hello");} // анализ токена сводится к тому// что бы определить в каком регистре // было записано словоvoid analyze(const char* data, const size_t length){ const str word(data, length); std::cout<<"word '"<<word<<"' is "; const auto result = checkCase(data, length); if(result == eLOWER) std::cout<<" lower case\n"; else if(result == eUPPER) std::cout<<" upper case\n"; else std::cout<<" mixed case\n";} // проверяет регистр каждой буковки// определяя регистр всего токенаeCASE checkCase(const char* data, const size_t length){ int flags = 0; for(size_t n=0; n<length;++n) if( !islower(data[n]) ) flags |= eUPPER; else flags |= eLOWER; if(flags == (eLOWER|eUPPER) ) return eMIXED; else if(flags == eLOWER) return eLOWER; return eUPPER;} // по знакам пунктуации находит где начинается и заканчивается очередное слово// и скармливает его функции-обратного вызоваvoid tokenize(callback func, const str& text, const str& delimiters, bool trimEmpty){ str::size_type pos, lastPos = 0; while(true) { pos = text.find_first_of(delimiters, lastPos); if(pos == std::string::npos) { pos = text.length(); if(pos != lastPos || !trimEmpty) func(text.data()+lastPos, pos-lastPos); break; } else { if(pos != lastPos || !trimEmpty) func(text.data()+lastPos, pos-lastPos); } lastPos = pos + 1; }}