2017-03-06 72 views
1
#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”, '一个' +(STR [1] - 'A' +旋转)%26))C旋转字符串程序?

灿任何人只要写一个简要的解释很快,这将有助于我

+1

这是被称为[恺撒密码]一个简单的密码(https://en.wikipedia.org/wiki/Caesar_cipher)的好方法。据说,朱利叶斯使用了3(和23个字母[拉丁字母](https://en.wikipedia.org/wiki/Latin#Phonology))的偏移量,而不是更现代的26个字母的变体 - J,U,和W是新人)。 –

+0

注意不要在本教程中学到错误的教训:此算法仅“加密”[基本拉丁字母](https://en.wikipedia.org/wiki/ISO_basic_Latin_alphabet)字母的小写字母。文本 - 甚至是英文文本 - 使用比所有基本拉丁字母更多的字母。字符值的算术适用性非常有限。 –

回答

1

该方案是用户输入的文字和对每个字符的基础根据输入的号码通过拼音旋转它。它的工作原因是ASCII table

这行需要用户输入的字符,通过'a'抵消它(相当于在ASCII 91),在rotation因素增加,然后对结果(再次字母表多少字符有执行模26? )以确保结果仍然是小写字符。

我敢打赌,你可以找到打破这一程序:)

+0

解决这个问题的一种方法是'EBCDIC'而不是ASCII,因为字母字符不需要按照C标准进行顺序[并且它们不在EBCDIC中](https://en.wikipedia.org/wiki/EBCDIC#Compatibility_with_ASCII) –