Пример для латиницы, но для кириллицы тоже будет работать.
Я делаю так, хотя меня за это и ругают некоторые граждане.
Может быть кому-то кажется, что это не очень красиво, зато решение на 101% портабельное.
Будет работать на всех кодировках, и на ASCII, и на EBCDIC и на любой другой.
Для кириллицы будет работать и на КОИ и на CP1251 и на Юникоде.
char my_to_upper(char ch){
char retchar;
switch(ch){
case 'a':retchar='A';break;
case 'b':retchar='B';break;
case 'c':retchar='C';break;
case 'd':retchar='D';break;
case 'e':retchar='E';break;
case 'f':retchar='F';break;
case 'g':retchar='G';break;
case 'h':retchar='H';break;
case 'i':retchar='I';break;
case 'j':retchar='J';break;
case 'k':retchar='K';break;
case 'l':retchar='L';break;
case 'm':retchar='M';break;
case 'n':retchar='N';break;
case 'o':retchar='O';break;
case 'p':retchar='P';break;
case 'q':retchar='Q';break;
case 'r':retchar='R';break;
case 's':retchar='S';break;
case 't':retchar='T';break;
case 'u':retchar='U';break;
case 'v':retchar='V';break;
case 'w':retchar='W';break;
case 'x':retchar='X';break;
case 'y':retchar='Y';break;
case 'z':retchar='Z';break;
default: retchar=ch;break;
}
return retchar;
}
UPD1:
В большинстве случаев для кириллицы это не будет работать, т.к. буквы
в большинстве случаев занимают > 1 байта, а размер char в большинстве
случаев равен 1 байту – Tocic 5 минут назад
Не, ну для Юникода, конечно, надо брать тип wchar_t.
Если входной символ wchar_t, то и выходной символ, естественно, тоже будет wchar_t.
Идея в том, что схема со switch работать будет и для всех типов символов (в том числе и для wchar_t), и для всех кодировок.
В конце концов, если уж быть пуристом, можно сделать шаблон.
template <class T> T my_to_upper(T ch){
T retchar;
switch(ch){
case 'a':retchar='A';break;
case 'b':retchar='B';break;
case 'c':retchar='C';break;
case 'd':retchar='D';break;
case 'e':retchar='E';break;
case 'f':retchar='F';break;
case 'g':retchar='G';break;
case 'h':retchar='H';break;
case 'i':retchar='I';break;
case 'j':retchar='J';break;
case 'k':retchar='K';break;
case 'l':retchar='L';break;
case 'm':retchar='M';break;
case 'n':retchar='N';break;
case 'o':retchar='O';break;
case 'p':retchar='P';break;
case 'q':retchar='Q';break;
case 'r':retchar='R';break;
case 's':retchar='S';break;
case 't':retchar='T';break;
case 'u':retchar='U';break;
case 'v':retchar='V';break;
case 'w':retchar='W';break;
case 'x':retchar='X';break;
case 'y':retchar='Y';break;
case 'z':retchar='Z';break;
default: retchar=ch;break;
}
return retchar;
}
UPD2:
Для кириллицы в кодировке CP1251 (которая как раз используется в Борланд 6.0 Билдер), будет работать и вариант с char.
UPD3:
Ваш код для char можно записать как return symbol < 65 || symbol > 122
? symbol : ((char)(((int)symbol) + 32)); – LLENN 10 секунд назад
Это будет работать для кодировки ASCII. Но, к примеру, для кодировки EBCDIC это работать не будет.
UPD4:
@pepsicoca1 '...' - это литерал типа char – Tocic 10 минут назад
Правильно, но на этот случай у нас есть switch с винтом.
wchar_t my_to_upper(wchar_t ch){
wchar_t retchar;
switch(ch){
case L'a':retchar=L'A';break;
case L'b':retchar=L'B';break;
case L'c':retchar=L'C';break;
case L'd':retchar=L'D';break;
case L'e':retchar=L'E';break;
case L'f':retchar=L'F';break;
case L'g':retchar=L'G';break;
case L'h':retchar=L'H';break;
case L'i':retchar=L'I';break;
case L'j':retchar=L'J';break;
case L'k':retchar=L'K';break;
case L'l':retchar=L'L';break;
case L'm':retchar=L'M';break;
case L'n':retchar=L'N';break;
case L'o':retchar=L'O';break;
case L'p':retchar=L'P';break;
case L'q':retchar=L'Q';break;
case L'r':retchar=L'R';break;
case L's':retchar=L'S';break;
case L't':retchar=L'T';break;
case L'u':retchar=L'U';break;
case L'v':retchar=L'V';break;
case L'w':retchar=L'W';break;
case L'x':retchar=L'X';break;
case L'y':retchar=L'Y';break;
case L'z':retchar=L'Z';break;
default: retchar=ch;break;
}
return retchar;
}