2012-10-19 61 views
0

這對於一些人來說可能看起來像一個非常簡單的解決方案,但我一直試圖弄清楚它現在的一段時間,它讓我煩惱。數學運算問題

int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
char c = 'A' + sum%26; 

我有麻煩提出的解決方案數學從來就不是我的強項。如果p[i]=72 or 'H's2[i]=5char c的值應該等於79的結尾。 這個操作奇妙地工作,但我試圖理解發生了什麼,所以我試圖用普通的計算器來做這件事,並繼續提出錯誤的答案。如果有人能夠引導我完成操作的順序和價值將是我會感激。這裏是我到目前爲止,工程完整的源代碼:

#include <stdio.h> 
#include <cs50.h> 
#include <string.h> 
#include <ctype.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    char s2[25]; 
    strcpy(s2, argv[1]); 
    int keyLen = strlen(s2); 
    printf("Please enter a string of text to be encrypted!\n"); 
    string p = GetString(); 
    for (int i = 0, n = strlen(p); i < n; i++) 
    { 
     if (isupper(p[i])){ 
     int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
     char c = 'A' + sum%26; 
     printf("%c", c); 
     } 
    } 
    printf("\n"); 
    printf("%d\n", keyLen); 

} 

我在做此操作的方法是:

int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
//int sum = (72-65) + (72 % 5) - 65) sum= -56 
char c = 'A' + sum%26; 
//char c = 65 + -56 %26 char c = -8 

我明明知道我的數學是關閉的,但我認爲我所做的一切它正確時,我通過調試器sum = 14char c = 79 or 'O'運行該操作應該像它應該。

+0

所以你說你的代碼工作完美,但你不能讓你的計算器工作? –

+1

你能總結一下你計劃做什麼? – John

+0

我對這個問題的理解是,代碼工作正常,但OP正試圖手動重新運行計算,以瞭解它是如何工作的。 –

回答

3
int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A'); 
//int sum = (72-65) + (72 % 5) - 65) sum= -56 

你的誤解就在這裏。

什麼代碼的作用

(s2[i % keyLen] - 'A') 

裝置

(char_from_s2 - 'A') 

其中char_from_s2是在索引i % keyLens2字符,即,在i位置的字符纏繞,以適應長度的字符串。

你的計算表​​明

你的計算做一些不同的東西:

(char_from_p % keyLen) - 'A' 

你把從p而不是從s2字符,並應用%運營商的字符值而不是索引。

+0

非常感謝你的完美 – Yamaha32088