2012-05-28 4 views
1

Я хотел бы знать, как «вычесть буквы» в C:
Я имею в виду, у меня есть 2 письма, «а» и «C» и я хочу, чтобы выполнить «c'-» a '=' b ', которое равно 3-1 = 2.
Как можно получить такое же поведение в C?
Я могу конвертировать Письма-> Числа но как управлять Ограниченная длина алфавита? Спасибо.вычитая буквы с

+0

Спасибо за ответы, что мне было нужно, это управление тем фактом, что алфавит имеет 26 букв. Я имею в виду, что делать так, как вы полагаете, я не мог бы делать b-z или b-d, например. – JJJ

+2

Что вы ожидаете от результата при вычислении ''b' - 'z''? –

+0

'b' - 'z' == 'c', twain249 отлично понимает, спасибо. – JJJ

ответ

4

можно рассматривать буквы как числа, а затем добавить букву '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; 

Это даст:

  1. 'z' для 'b'-'c'
  2. 'y' для 'b'-'d'
+0

Не могли бы вы просто использовать для этого '' 'оператор? '-2% 26 = 24', что и получилось с вашим алгоритмом. –

+0

@SashaChedygov В чем смысл? Это сделало бы код медленнее и труднее читать. – Lundin

+0

Отлично, вот что я искал и не мог найти; но что ж, вы имели в виду «z»? – JJJ

0

Вы хотите этого?

char a1,a2,a3; 
a3 = a1 - a2 + 'a'; 
+0

Спасибо за ответ, мне было нужно именно то, что в алфавите есть 26 букв. Я имею в виду, что делать так, как вы полагаете, я не мог бы делать b-z или b-d, например. – JJJ

+0

на языке C. 'a' ~ 'z' представляется в число, поэтому вы можете сделать это как целое число. поэтому b - d = -2. – RolandXu

+0

Просто имейте в виду, что подпись типа char определяется реализацией. Этот код не переносится и, возможно, приведет к неопределенному поведению из-за целочисленного нижнего потока. Например, 'a3 = 'a' - 'b' + 'a'' является неопределенным поведением в реализациях, где тип char не имеет знака. – Lundin