![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Ramigo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.1.2007 Репутация: нет Всего: нет |
Встал вопрос вот в чем:что за оператор для замены ргистра буквы в С++?короче надо написать прогу чтоб та меняла регистр т.е. с большой на маленькую и наоборот..перерыл все учебники но не нашел(((помогите плиззз!
|
|||
|
||||
szz |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Добавлено @ 13:52 http://www.gnu.org/software/libc/manual/ht...Conversion.html --------------------
|
||||
|
|||||
Ramigo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.1.2007 Репутация: нет Всего: нет |
бошое пасибо!но в силу еще своей неопытности:эт вводится до функции main?первая строка само собой....
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Внутри main |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Ramigo, toupper, tolower
а вообще для английских букв даже этого не нужно. Английский алфавит в кодировке ASCII располагается последовательно, сначала большие буквы, потом 6 символов, потом маленькие. Поэтому 'A'+32 == 'a' и соответсвенно наоборот -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Смысл правильный, а вывод нет. Из маленьких ASCII большие: a = c & 0xDF или a = c & (0xFF ^ 0x20) Из больших ASCII маленькие: a = c | 0x20 здесь c - любой буквенный символ (регистр значения не имеет) Кажется, будет работать и с кодировками CP1251/KOI8-R для русских букв, но я не проверял. Это сообщение отредактировал(а) bsa - 20.1.2007, 17:34 |
|||
|
||||
Rockie |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
почему?
непонятно, но интересно ![]() -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
Axxent |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Разница невелика, просто процу быстрее проставить шестой бит в единицу или ноль чем прибавить или отнять 32. Результат одинаков. Что происходит - происходит побитовая установка по маске. a = b & 0xDF - побитовое И с маской 11011111, a = b | 0x20 - побитовое ИЛИ с маской 00100000.
Это сообщение отредактировал(а) Axxent - 20.1.2007, 16:08 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Для меня это открытие. Не знал, что скорость выполнения этих операций разная... Вариант со сложением я посчитал не очень корректным, так как он неправильно обработает буквы в другом регистре. Т.е. операция с И и ИЛИ более корректно отработают "This simple string", а вот операции сложения/вычитания накосячат. |
|||
|
||||
Axxent |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Тоже верно. Разница есть, если строк мало то при прочих равных ей можно пренебречь, но все же побитовые операции выполняются чуть-чуть быстрее.
|
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
На современных CPU (где-то так начиная с первых пней ![]() Это сообщение отредактировал(а) nickless - 20.1.2007, 16:49 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Интересно, это как быстрее?!? Скорость сложения (на процессорах Pentium и выше) 1 такт. Скорость операции OR по твоему 0.99 такта? ![]()
|
||||
|
|||||
Axxent |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Мда, прокосил
![]() ![]() Это сообщение отредактировал(а) Axxent - 20.1.2007, 17:10 |
|||
|
||||
Rockie |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
bsa, Axxent, а побитовое И чего с чем? что такое a и b?
bsa, в этой строке пробелы, они ведь не переводятся в верхний/нижний регистр. А можно пример кодом где вариант с масками не косячит а сложение/вычитание косячит?
imho современный компилятор должен это соптимизировать. Добавлено @ 17:20 вообще кажися просветлеваю =) bsa, имеется ввиду, что при варианте с установкой бита буква 'S' останется 'S'? -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||
|
|||||||
Axxent |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
a - куда результат помещаем, b - твое число или символ. В двоичном коде допустим А = 0x41 = 01000001b, хочешь сделать маленькой - поставь шестой бит: A | 0x20 = 01000001 | 00100000 = 01100001 = a.
Мелкие буквы. Большая первая станет маленькой, к остальным еще +32. Получится галиматья. |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Axxent, ага, спасибо, уже дошел =) просто
для меня не совсем user-friendly. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Забыл слэш поставить. Уже исправил.
Там нет никакого b - это от phpBB (жирный шрифт). ![]() читать надо так: a = c & 0xDF или a = c & (0xFF ^ 0x20), что тоже самое Просто 0xFF ^ 0x20 = 0xDF (это для тех, кто не умеет оперировать 16-тиричными числами) |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Кстати интересно, что способ этот работает только по причине того что буквы лежат в том интервале, в котором лежат. Похоже именно ради того, чтобы освободить этот бит буквы располагаются так:
65[10] = 1000001[2] .. 90[10] = 1011010[2] 97[10]= 1100001[2] .. 122[10] = 1111010[2] и между интервалами добавлены "лишние" символы, чтобы "добить" до 32. бугага ![]() Это сообщение отредактировал(а) Rockie - 20.1.2007, 17:50 -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |