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

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

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

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

29.03.2011, 19:07. Просмотров 2260. Ответов 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++
Кто может привести пример , когда нужно использовать операции: 1) &lt;&lt; сдвиг влево 2) &gt;&gt; сдвиг вправо

Сдвиг влево - C++
Напишите программу, которая циклически сдвигает элементы массива влево (0-й элемент становится последним, 1-й становится 0-м, ...,...

массив, сдвиг влево - C++
нужен код программы, которая сдвигает элементы массива на 1 влево, тоесть было 1 5 6 8 9, стало 5 6 8 9 1 ... через функцию(в main только...

Логический сдвиг влево - C++
unsigned __int64 number = 239176053778592; ClongNumber c(number); c.print(); for(int i = 0; i &lt; 18; i++) { unsigned...

Циклический сдвиг влево - C++
Помогите написать программу которая будет осуществлять циклический сдвиг влево введённого числа на N разрядов (например, при сдвиге числа...

Сдвиг слов влево - C++
В переменной a есть строка из 5 слов. Как в цикле сделать сдвиг каждого слова влево и вывести каждый измененный результат? Например...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
1
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
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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);
}
1
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
29.03.2011, 20:29 #5
deleted.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 20:29
Привет! Вот еще темы с ответами:

Сдвиг массива влево на n знаков - C++
пишу на C++ не могу найти ошибку в коде. помогите я не очень силен только учусь))) спасибо!!! вот код #include&lt;iostream&gt; ...

Циклический сдвиг массива влево - C++
условие: задан массив целочисленный состоящий из 10 элементов нужно сделать циклический сдвиг влево так чтобы первый максимум стал на...

Побитовый сдвиг влево и вправо - C++
Что выполнится быстрее - сдвиг влево или сдвиг вправо? И как замерить время выполнения каждой из операций в коде? Добавлено через 2...

Многократный сдвиг массива влево - C++
У меня есть массив , к примеру : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Проходя по нему я проверяю является ли число...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.03.2011, 20:29
Ответ Создать тему
Опции темы

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