2017-03-06 34 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) –