Вы также можете перевернуть 32-битный код: работает с символами ASCII:
char flipcase(char x)
{
if( ::isalpha(x) )
{
return x ^ 32;
}
}
Вы также можете использовать таблицу.Затем создайте статическую таблицу
char flipcase( char x )
{
return fliptable[x];
}
Последний метод имеет преимущество, заключающееся в возможности использования для внешних наборов символов, если они не являются многобайтовыми - он не будет работать для этого.Вы можете создать аналогичную таблицу для символов wchar_t с любым набором символов, который вы используете.Хранение таблицы требует небольшого объема памяти, если размер вашего персонажа не превышает 2, хотя для UTF-32 это будет слишком много, а время поиска тривиально.Конечно, в действительности вы должны хранить небольшую структуру для каждого символа с его чертами.
С любым из вышеперечисленных вы будете использовать std :: transform.
А теперь действительно умный бит: std:: transform может использовать класс (функтор), а также обычную функцию.Поэтому для многобайтовых символов мы можем хранить состояние, пока символ замены всегда будет иметь один и тот же первый элемент.Если это не так, то преобразование не будет работать с обычными итераторами.Однако вы можете написать собственный итератор для обработки многобайтовых символьных строк, которые будут перебирать печатаемый символ за раз (итератору придется обращаться к многобайтовым символам, представляющим символ).