私はこのC++コードがアファイン暗号での暗号化に有効だと思います。しかし、出力には通常のアルファベットではなく奇妙な文字が表示されます。なぜか分からない。 0にあなたの変数coprimetestを初期化し、私はstd::cin >> whatever;
を使用してコンソールに入力した文字列の長さのために私はまでその文字列内のすべての文字の変更文字を取得していますことがわかり、この数回実行した後アファイン暗号化をC++で
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<cstring>
#include<conio.h>
using namespace std;
int main()
{
cout << "Enter string: ";
char whatever[20];
gets (whatever);
char something [20];
int a;
int b = 8;
int m = 26;
int coprimetest;
for (a=2;coprimetest!=1;a++)
{
for (int i=1;i<=a&&i<=m;i++)
{
if (a%i==0 && m%i ==0) coprimetest=i;
}
}
for (int i = 0; i < sizeof(whatever); i++)
something [i]= (char)((((a * whatever[i]-65) + b) % m)+65);
for (int i=0; i < sizeof(something); i++)
cout << something[i];
}
これはおそらく問題ではありませんが、最初のループでは、それを初期化する前に 'coprimetest'の値をチェックしています。これにより、未定義の動作が発生します。これは、過度の積極的な最適化のためにコンパイラによって悪用される可能性があります。 – eran
あなたのコードをテストしています私はあなたの問題を経験していません:コードはすべての入力または特定のものに対して奇妙な文字を出力しますか?なんらかの理由で何らかの理由でprintable charの範囲外のascii値の範囲を移動させると、初期化されていないvarが部分的に責任を負う可能性があります。 – sergico
@Ayatoまた、バッファに 'something'と' whateverそれは同じ入力を与えれば異なる出力を得ていることを意味し、コード – sergico