I.E。,你输入数字5,字符A和输出将产生F.我不知道如何开始解决这个问题,是不是让我朝正确的方向努力?
答案 0 :(得分:9)
根据ASCII code(通常),单个字符由数字表示。在C中,如果你为一个角色添加一个数字,你就会将角色向下移动。尝试:
char c = 'A';
int n = 5;
printf("%c\n", c + n);
答案 1 :(得分:6)
查看ASCII table并记下字符的值。
答案 2 :(得分:5)
试试这个:
#include <stdio.h>
char shift_char(char val, char shift)
{
val = toupper(val);
assert(isupper(val));
char arr[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return arr[ ( (toupper(val) - 'A' + shift) % 26) ];
}
如果你想保留角色的情况,你可以得到一点点发烧友。它还假设,但不验证shift
是非负的。这种情况可能会导致您需要防范模数操作的问题......或者更好的防止。不过,由于这被标记为家庭作业,这就是你应该解决的问题。
答案 3 :(得分:1)
如果你可以假设ASCII,那就更容易了。
字符只不过是简单的数字:只有对所述数字的解释才会改变。在ASCII中,所有字母都是顺序的;所以'A'+ 5的数字是'F'的数字; 'F' - 1是'E'......,...
int ch = 'J';
ch -= 2; putchar(ch);
ch -= 3; putchar(ch);
ch += 7; putchar(ch); putchar(ch);
ch += 3; putchar(ch);
puts("");
请注意包装!
如果你不能假设ASCII,你需要自己转换字符。类似的东西:
char charr[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int ndx = 9; /* charr[9] is 'J' */
ndx -= 2; putchar(charr[ndx]);
ndx -= 3; putchar(charr[ndx]);
ndx += 7; putchar(charr[ndx]); putchar(charr[ndx]);
ndx += 3; putchar(charr[ndx]);
puts("");
不要忘记包装
答案 4 :(得分:0)
其他人指出你可以使用ASCII。 处理包装的简单方法是使用模数运算:
char result, ch;
int offset;
... // Populate ch with the letter to be changed and offset with the number.
result = ch - 'a';
result = (result + offset) % 26; // 26 letters in the alphabet
result += 'a';