所以我需要在C中发生这种情况,一直在考虑它一个小时左右而且无法弄清楚如何去做,或者如何向谷歌询问这个特定的东西,它必须与输入的任何字母一起使用。
如何计算给定字母的字母表中的下一个和上一个字母?
这是一个链接: http://imgur.com/bRdLonZ
答案 0 :(得分:0)
请查看此示例应该执行您想要的操作。你必须记住考虑相对位置,因为A-Z位于ASCII的中间并且记得在字母A和Z处绕过边缘,这样A在Z之后,Z在A之前。
#include <stdio.h>
#include <ctype.h>
int main() {
int resp;
printf("Please input an uppercase letter: ");
resp = getchar();
int i = resp;
if ((resp - 1) < 'A')
i = resp + 26;
printf("The lowercase version of the letter is: %c\n", tolower(resp));
printf("The letter %c comes before the letter %c in the alphabet \n", i - 1, resp);
i = resp;
if ((resp + 1) > 'Z')
i = resp - 26;
printf("The letter %c comes after the letter %c in the alphabet \n", (i + 1), resp);
printf("%c is letter nr %d in the alphabet \n", resp, resp - 'A' + 1);
}
测试
Please input an uppercase letter: C
The lowercase version of the letter is: c
The letter B comes before the letter C in the alphabet
The letter D comes after the letter C in the alphabet
C is letter nr 3 in the alphabet
Process finished with exit code 0
答案 1 :(得分:0)
虽然Dac Saunders已经给出了一个很好的解释和一个好的草图,但我认为有一个稍微不同的例子可能也会有所帮助。
a.o:
(__TEXT,__text) section
_main:
0000000000000000 pushq %rbp
0000000000000001 movq %rsp, %rbp
0000000000000004 subq $0x10, %rsp
0000000000000008 leaq _main.a(%rip), %rax
000000000000000f movl %edi, -0x4(%rbp)
0000000000000012 movq %rsi, -0x10(%rbp)
0000000000000016 movq %rax, %rdi
0000000000000019 callq _doit
000000000000001e leaq _main.b(%rip), %rdi
0000000000000025 callq _doitt
000000000000002a leaq _main.c(%rip), %rdi
0000000000000031 callq _doittt
0000000000000036 leaq _main.d(%rip), %rdi
000000000000003d callq _doitttt
0000000000000042 leaq _main.e(%rip), %rdi
0000000000000049 callq _doittttt
000000000000004e xorl %eax, %eax
0000000000000050 addq $0x10, %rsp
0000000000000054 popq %rbp
0000000000000055 retq