【问题标题】:C Rotating String Program?C旋转字符串程序?
【发布时间】:2017-03-06 22:20:52
【问题描述】:
#include <stdio.h>


int main()
{
int rotation, i=0;
char str[80]={0}; 
printf("Enter Text: ");
scanf("%[^\n]", str); 
printf("\"");

printf("Enter Rotation: ");
scanf("%i", &rotation);

while(str[i]) 
    {
        if (str[i] >= 'a' && str[i] <= 'z')
        printf("%c\n", 'a' + (str[i] - 'a' + rotation)%26); 
        else    
        printf("%c\n", str[i]);
        i++;    
    }

return 0;
}

很难理解这行代码(printf("%c\n", 'a' + (str[i] - 'a' + rotation)%26); )

谁能快速写一个简短的解释对我有帮助

【问题讨论】:

  • 这是一个简单的密码,称为Caesar Cipher。据称,Julius 使用了 3 的偏移量(以及 23 个字母的 Latin alphabet,而不是更现代的 26 个字母变体——J、U 和 W 是新出现的)。
  • 注意不要从本教程中学到错误的教训:该算法仅“加密”Basic Latin 字母的小写字母。文本——甚至是英文文本——使用的字母比所有基本拉丁字母都要多。字符值的算术适用性非常有限。

标签: c arrays string character caesar-cipher


【解决方案1】:

程序正在获取用户输入的文本,并根据输入的数字逐个字符旋转它通过字母表。由于ASCII table,它可以工作。

有问题的行采用用户输入的字符,将其偏移 'a'(在 ASCII 中等于 91),添加 rotation 因子,然后对结果执行模 26(有多少个字符再次在字母表中?)以确保结果仍然是小写字符。

我打赌你能找到破解这个程序的好方法:)

【讨论】:

  • 解决这个问题的一种方法是EBCDIC 而不是 ASCII,因为根据 C 标准 and they aren't in EBCDIC,字母字符不需要是连续的
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2018-07-14
相关资源
最近更新 更多