0

クラスについては、C++ でシーザー暗号化プロジェクトを開発する必要があります。これは、文字列を取り込み、すべての ascii コードをランダムな整数でシフトします。プロジェクトは完全に機能しており、コードは以下のとおりです。

#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;
int main(int argc, const char * argv[]) {

    string sentence = "";
    int shifter, counter = 0, position = 0;
    srand(time(NULL));
    shifter = (rand() % 25) + 1;
    cout << "Enter a sentence, and this program will encrypt it: " << endl;
    getline(cin, sentence);
    cout << "\n\n\n";
    for (int i = 0; i < sentence.length(); i++) {
        sentence[i] = sentence[i] + shifter;
        cout << sentence[i];
    }

    return 0;
}

私の唯一の問題は、先生がそれらを文字だけにシフトすることを望んでいることです。文字が「z」でシフトが「2」の場合、彼女は出力を「b」にしたいと考えています。これがどのように行われるかはわかりません。

この問題に対する簡単な手順は可能ですか? もしそうなら、それはどのように行われますか?

4

2 に答える 2

0

これで問題が解決します:) http://ideone.com/6AzY2i

#include <bits/stdc++.h>
#define ll long long int
#define MOD 1000000007

using namespace std;
char st[10000000], s[1000000];

int main(){
    cout << "Enter your Ceaser Chipher to decrypt:\n";
    cin >> s;
    ll t;
    t = strlen(s);
    ll n;
    strcpy(st,s);
    /*cout << "Shift of how many characters:\n";
    cin >> n;*/
    cout << "Shift in which direction (r(right) or l(left)) :\n";
    char c;
    cin >> c;
    srand(time(NULL));
    n = (rand() % 25) + 1;
    cout << "Your String is shifted by:" << n <<endl;
    ll f;
    if(c=='r'){
        for(int i=0;i<strlen(st);i++){
            f = st[i] + n;
            if(f>122)
                f = f - 26;
            st[i] = f;
        }
    }
    else if(c=='l'){
        for(int i=0;i<strlen(st);i++){
            f = st[i] - n;
            if(f<97)
                f = f + 26;
            st[i] = f;
        }
    }
    cout <<"Your encrypted String :-> "<< st <<endl;
    return 0;
}
于 2015-05-28T16:58:47.407 に答える