Я хотел бы знать, как «вычесть буквы» в C:
Я имею в виду, у меня есть 2 письма, «а» и «C» и я хочу, чтобы выполнить «c'-» a '=' b ', которое равно 3-1 = 2.
Как можно получить такое же поведение в C?
Я могу конвертировать Письма-> Числа но как управлять Ограниченная длина алфавита? Спасибо.вычитая буквы с
ответ
можно рассматривать буквы как числа, а затем добавить букву 'a'
назад, чтобы нормализовать его
так
char c1 = 'a';
char c2 = 'c';
int diff = c2 - c1; //'c' - 'a' = 2
char ans = diff + 'a' - 1; //add 'a' and subtract 1 to normalize it
Если вы хотите разница номер просто использовать diff
от моего ответа (ans
даст вы письмо).
Это не будет обернуть вокруг так
'a' - 'b'
приведет -1
(или символ перед а)
Если вы хотите, чтобы справиться с негативов с обручем вы должны проверить его
int diff = c2 - c1;
char ans;
diff > 0 ? ans = diff + 'a' - 1 : 'z' + diff + 1;
Это даст:
'z'
для'b'-'c'
'y'
для'b'-'d'
Вы хотите этого?
char a1,a2,a3;
a3 = a1 - a2 + 'a';
Спасибо за ответ, мне было нужно именно то, что в алфавите есть 26 букв. Я имею в виду, что делать так, как вы полагаете, я не мог бы делать b-z или b-d, например. – JJJ
на языке C. 'a' ~ 'z' представляется в число, поэтому вы можете сделать это как целое число. поэтому b - d = -2. – RolandXu
Просто имейте в виду, что подпись типа char определяется реализацией. Этот код не переносится и, возможно, приведет к неопределенному поведению из-за целочисленного нижнего потока. Например, 'a3 = 'a' - 'b' + 'a'' является неопределенным поведением в реализациях, где тип char не имеет знака. – Lundin
Спасибо за ответы, что мне было нужно, это управление тем фактом, что алфавит имеет 26 букв. Я имею в виду, что делать так, как вы полагаете, я не мог бы делать b-z или b-d, например. – JJJ
Что вы ожидаете от результата при вычислении ''b' - 'z''? –
'b' - 'z' == 'c', twain249 отлично понимает, спасибо. – JJJ