私はC++でCeasar暗号のための小さなプログラムを書いています。 私は論理をうまくやっていると思います。しかし、私が理解できないいくつかの奇妙な理由のため、ASCIIの追加は間違っています。ここに私のコードです: この行で何かが間違っています: "s [i] =(abs(s [i]))+ k;"asciiで絶対値が正しく追加されない
次のように私は入力を与えています:
XY
出力は次のようになります。ED: GH
は私がように、出力を取得しています。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
string s;
cin >> s;
int k;
cin >> k;
k = k % 26;
for(int i = 0; i<s.size(); i++){
if((abs(s[i]) >=65 && abs(s[i]) <=90) || (abs(s[i]) >= 97 && abs(s[i]) <= 122)){
cout << "k is: "<<k << endl; //k should be 9
//for x abs(s[i]) should be 120
cout << "Absolute value is: "<<abs(s[i]) <<endl;
s[i] = (abs(s[i])) + k; // thish is not 129.. i am getting 127
cout << "After adding K: "<<abs(s[i]) << endl;
if((abs(s[i]) > 90) && (abs(s[i]) < 97))
s[i] = abs(s[i]) - 26;
if(abs(s[i]) > 122){
s[i] = abs(s[i]) - 26;
}
}
}
for(int i =0 ; i< s.size(); i++)
cout<<s[i];
return 0;
}
助けてください。ありがとう。
文字列は符号付き文字で作られていますか?だから129は無事だ。 –
ああ、私はそれを逃した。私たちがこの問題を解決できる迅速な方法はありますか? – hshantanu
私の答えを確認してください:) –