void ToSentenceCase(std::wstring& str) { if (!str.empty()) { ToLowerCase(str); bool isCapped = false; for (size_t i = 0; i < str.length(); ++i) { if (IsEOSPunct(str[i])) isCapped = false; if (!isCapped && iswalpha(str[i]) != 0) { WCHAR* srcAndDest = &str[i]; LCMapString(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, srcAndDest, 1, srcAndDest, 1); isCapped = true; } } } }
void ToSentenceCase(std::wstring& str) { auto to_upper = [](wchar_t& ch) { ch = std::use_facet<std::ctype<wchar_t>>(std::locale()).toupper(ch); }; if (!str.empty()) { ToLowerCase(str); bool isCapped = false; for (size_t i = 0; i < str.length(); ++i) { if (IsEOSPunct(str[i])) isCapped = false; if (!isCapped && iswalpha(str[i]) != 0) { to_upper(str[i]); isCapped = true; } } } }