Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
nd0ut
Сообщений: n/a
#1

Сдвиг символа влево - C++

29.03.2011, 19:07. Просмотров 2125. Ответов 4
Метки нет (Все метки)

Помогите осуществить сдвиг символа (буквы) из циклического алфавита на n влево. То есть, например, на вход методу дается буква 'A' и число 1, а возвратиться должна буква 'Z'.

У меня есть вариант для смещения вправо, который я никак не могу переделать ):
C++
1
2
3
4
5
6
7
char c = 'A'; //буква А
int n = 1; //смещается на 1 вправо
char res = (char)('A' + (c - 'A' + n) % 26 ); //получается буква B
 
char c = 'Z'; //буква Z
int n = 1; //смещается на 1 вправо
char res = (char)('A' + (c - 'A' + n) % 26 ); //получается буква A
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2011, 19:07     Сдвиг символа влево
Посмотрите здесь:

C++ Циклический сдвиг массива влево
C++ Циклический сдвиг массива влево
Сдвиг влево C++
Многократный сдвиг массива влево C++
C++ Логический сдвиг влево
C++ массив, сдвиг влево
C++ Сдвиг влево на один бит
Сдвиг слов влево C++
C++ Циклический сдвиг влево
C++ Сдвиг массива влево на n знаков
C++ Побитовый сдвиг влево и вправо
Где и когда уместно применять операции << (сдвиг влево) и >> (сдвиг вправо)? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
29.03.2011, 20:05     Сдвиг символа влево #2
а попроще никак нельзя?

C++
1
2
3
   char x = 'a';
   char y;
   y = x + 1;// получается буква b
Добавлено через 5 минут

Не по теме:

аа дошло. ключевое слово "циклический"



Добавлено через 3 минуты
C++
1
2
3
4
    char x = 'B'; //буква B
    int n = 3; //смещается на 3 влево
    char y = ('Z' - ('Z' - x + n) % 26 ); //получается буква Y
    std::cout<<y;
nd0ut
Сообщений: n/a
29.03.2011, 20:12     Сдвиг символа влево #3
Цитата Сообщение от no0ker Посмотреть сообщение
а попроще никак нельзя?

C++
1
2
3
   char x = 'a';
   char y;
   y = x + 1;// получается буква b
В этом случае если будет буква 'Z', то на выходе получится '{', что не верно.

Есть, конечно, более сложный вариант алгоритма
C++
1
2
3
4
5
6
7
8
char c = 'Z'; //буква Z
int n = 1; //сдвиг на 1 влево
char res; //тут будет результат
if(26 - ('Z' - c) <= n) { //если порядковый номер буквы меньше кол-ва символов для сдвига
    int k = n - (26 - ('Z' - c + 1)); //считаем на сколько символов надо сдвинуть с конца
    res = 'Z' + 1 - k; //сдвигаем
}
else res = c - n; //а тут если просто надо сдвинуть
Но в его сложности и проблема. Нужно как в первом посте - в одну строчку.

Добавлено через 2 минуты
Спасибо no0ker'у
igorrr37
1634 / 1262 / 128
Регистрация: 21.12.2010
Сообщений: 1,925
Записей в блоге: 7
29.03.2011, 20:12     Сдвиг символа влево #4
C
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<ctype.h>
 
int main(){
    int i=3;
    char c='B';
    for(; i; --i){
        if(!isalpha(--c)) c+=26;
    }
    printf("%c\n", c);
}
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
29.03.2011, 20:29     Сдвиг символа влево #5
deleted.
Yandex
Объявления
29.03.2011, 20:29     Сдвиг символа влево
Ответ Создать тему
Опции темы

Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru