在字母表中移一个字母?

时间:2011-03-07 20:40:38

标签: c

I.E。,你输入数字5,字符A和输出将产生F.我不知道如何开始解决这个问题,是不是让我朝正确的方向努力?

5 个答案:

答案 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';