рдЧреИрд░-рдПрдПрд╕рд╕реАрдЖрдИрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░рд┐рд╡рд░реНрд╕рд▓

рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ ICU рдХреНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЗрд╕ рдкреЛрд╕реНрдЯ рд╕реЗ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╕реАрдЦреЗрдВрдЧреЗред



рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдХреЙрдорд░реЗрдбреЛрдВ рд╕реЗ рд╕реБрдирдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрд▓рдЯ рджреЗрдЧрд╛ред рдФрд░ рдХреЛрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рд╡реНрдпреВ рдХреЛ рдХреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рднреА , рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рдкреНрд░рд╢реНрди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╣реА рд╕рдорд╛рдзрд╛рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓ рдпрд╛ рд▓реВрдк рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕реЗ рдкрд░реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╣рд╛рдВ рдкреНрд░реЗрд╖рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ ASCII рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдЧрд░ рдПрдХ UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕рд╛рде рдпрд╣рд╛рдБ рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВ: рдЪрд░ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд░реНрдг ред

рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд╛рд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рдмрд╛рдИрдВ рдУрд░ рдЗрдирдкреБрдЯ рд╣реИ, рджрд╛рдИрдВ рдУрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд┐рдХрд╛рд╕ рд╣реИ):
const char* cases[][2] = { //  ascii- {"", ""}, {"a", "a"}, {"ab", "ba"}, {"a b", "b a"}, //   ,   UTF-8 {"\xd1\x84", "\xd1\x84"}, //      {"x\xd1\x84", "\xd1\x84x"}, {"y\xd1\x84z", "z\xd1\x84y"}, {"\xd1\x84\xd1\x85", "\xd1\x85\xd1\x84"}, //   ,     {"\xd0\x98\xcc\x86", "\xd0\x98\xcc\x86"}, //       {"i\xd0\x98\xcc\x86", "\xd0\x98\xcc\x86i"}, {"\xd0\x98\xcc\x86i", "i\xd0\x98\xcc\x86"}, {"\xd0\x98\xcc\x86\xd1\x84", "\xd1\x84\xd0\x98\xcc\x86"}, //  : z╠Ж╠Иy {"z\xd0\x98\xcc\x86\xcc\x88y", "y\xd0\x98\xcc\x86\xcc\x88z"} };
      
      



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпреВрдирд┐рдХреЛрдб "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╣реИред" рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдИрд╕реАрдпреВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдиреЛрдЯ рдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдИрд╕реАрдпреВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реА рддрд░рд╣, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред



рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛

рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  1. рдПрдХ рдХреВрдЯ-рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░реЗрдВ,
  2. рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрд╛рдж рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╕рднреА рдЧреИрд░-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд░реНрдг рдФрд░ рдХреЗрд╡рд▓ рд╡реЗ рдЕрдкрдиреЗ рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХреНрд░рдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВ,
  3. рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдмрд╛рдж рдХреЗ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ,
  4. UTF-8 рдореЗрдВ рд╡рд╛рдкрд╕ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВред


рдбреЗрдЯрд╛ рд░реАрдбрд┐рдВрдЧ

Icu :: UnicodeString рд╡рд░реНрдЧ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдПрдХ рдЕрдореВрд░реНрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЗрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
 // Decoding icu::UnicodeString s = icu::UnicodeString::fromUTF8(cases[test_case][0]); // Encoding std::string result; s.toUTF8String(result);
      
      





рдЪрд░рд┐рддреНрд░ рднреЗрдж

Icu :: BreakIterator class рдЖрдкрдХреЛ UnicodeString рдореЗрдВ рдЕрдЧрд▓реЗ / рдкрд┐рдЫрд▓реЗ Extended_character / рд╢рдмреНрдж / рд╡рд╛рдХреНрдп рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдХреНрд░реЛрдорд┐рдпрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдЗрд╕рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдЦреЛрдЬрддреЗ рд╕рдордп рдпрд╣ рдкрд╛рда рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрд╛рда рдХреА рднрд╛рд╖рд╛ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред
 // Initialize iterator UErrorCode ec = U_ZERO_ERROR; icu::Locale ru_locale = icu::Locale("ru"); std::unique_ptr<icu::BreakIterator> iter; iter.reset(icu::BreakIterator::createCharacterInstance(ru_locale, ec)); iter->setText(my_unicode_string); // Set it to the beginning of my_unicode_string and get next character's position iter->first(); int32_t next_char = iter->next(); // Or set it to the after-last-character position and get previous character position iter->last(); int32_t this_char = iter->previous();
      
      





рдмрд╛рдж рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг

рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕рдм рдХреБрдЫ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк, рдФрд░ рдлрд┐рд░ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдореБрдЭреЗ рдЕрдЯрдкрдЯрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдореИрдВ рджреЛ рдХрддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛: рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдХрддрд╛рд░ рдЬреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╣ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднрд░рд╛ рд╣реБрдЖ рд╣реИ) рдФрд░ рдЬреЛ рдЕрдВрдд рдореЗрдВ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ( рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднрд░рд╛ рд╢реБрд░реВ рд╕реЗ рдХрд╛рдЯ)ред рдЬрдм рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП "рдХрд╛рдЯреЗ рдЧрдП" рдХреА рд╕рдВрдЦреНрдпрд╛, рд╡рд░реНрдгреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рд▓реЗрдХрд░ рдЙрд╕рдХреЗ рдШрдВрдЯреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд╣ рдХрддрд╛рд░ рдореЗрдВ рдЕрдкрдиреА рдЬрдЧрд╣ рдмрдирд╛ рд▓реЗрддрд╛ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖

рдпрд╣ рдореЗрд░рд╛ ICU рдЕрд╡рд▓реЛрдХрди рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдЬреАрдердм рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



All Articles