2017-08-16 99 views
0

我需要通過將每個字符遞增1來加密一個簡單的文本文件,即'a'變成'b','b'變成'c'等,'z'變成'a' 。通過遞增字符來加密文本文件

我已經按照下面的代碼完成了這項工作,雖然我的大部分輸出都是正確的,但似乎在每個文件的末尾都有問題。

例如,當輸入文件包含'a b c d'時,生成的輸出是'b c d ef',而不是應該是'b c d e'的答案。我似乎無法弄清楚這一點。

這是我的加密功能代碼:可以使用這種方式可以實現

void encrypt(char* inFileName, char* outFileName) { 
    out_stream.open(outFileName); 
    in_stream.open(inFileName); 
    if(in_stream.fail()) { 
     cout << "Failed to open input file." << endl; 
     exit(1); 
    } 
    else { 
     while(!in_stream.eof()) { 
      in_stream.get(letter); 

      if (letter == 'z') { 
       letter = 'a'; 
      } 

      if (letter == 'Z') { 
       letter = 'A'; 
      } 

      if (letter == ' ') { 
       letter = letter; 
      } 

      else { 
       letter = letter + 1; 
      } 

      out_stream << letter; 
     } 
    } 
} 
+1

的可能的複製[爲什麼的iostream :: EOF算錯了一個循環條件裏面?](https://stackoverflow.com/questions/5605125/why- (in_stream.eof())break;'in_stream.get(letter);' – 4386427

+0

只適用於最後的條件?這對你的代碼應該沒問題,但是會讓它更難理解。 – 4386427

+0

你知道其他的是(if-in-loop-condition-wrong-wrong) – Lefsler

回答

-1

移位密碼:

while(!in_stream.eof()) { 
    if (letter>='a' && letter<='Z') 
     letter = (letter+1)%'Z' + 'a'; 
    out_stream << letter; 
} 

從您的代碼減少冗餘,使之儘可能的緊湊,有在你的代碼中有太多無用的條件。

主要邏輯在於對來自... Z的字符進行加密,您無法預測文本文件中的其他字符,如\ n \ 0等,因此根本不應該處理它們。

-1

我可以建議這段代碼

while(!in_stream.eof()) { 
     if ((letter>='A' && letter<='Y')|| (letter>='a' && letter<='y')) 
      letter = (letter+1); 
     else if(letter== 'Z' || letter== 'z') 
      letter =(letter-25); 
    out_stream << letter; 
}