プログラムの実行中に発生するエラーの意味を理解するのに問題があります。Caesar 暗号プログラムを実行しようとしています。ほとんどの定数と宣言された関数を含むヘッダー ファイルもあります。
私が得ているエラーは次のとおりです。
In file included from proj1_test_public.cpp:62:
proj1.cpp: In function ‘int test_main()’:
proj1.cpp:16: error: invalid conversion from ‘char’ to ‘const char*’
proj1.cpp:16: error: initializing argument 1 of ‘char SolveCipher(const char*, char*)’
proj1.cpp:16: error: invalid conversion from ‘char’ to ‘char*’
proj1.cpp:16: error: initializing argument 2 of ‘char SolveCipher(const char*, char*)’
proj1.cpp: In function ‘void Decipher(char*, char)’:
proj1.cpp:41: warning: comparison between signed and unsigned integer expressions
proj1.cpp: In function ‘char SolveCipher(const char*, char*)’:
proj1.cpp:67: error: invalid types ‘const char[int]’ for array subscript
proj1.cpp:73: error: invalid types ‘const char[int]’ for array subscript
make: *** [proj1_test_public.o] Error 1
16 行目は、「char mess=SolveCipher(globeCip[i],dec_message[i]);」と書かれている場所です。
41行目は単なる警告ですが、機能します(解読関数にあります)
67 行目は、「if(Decipher(cip[k][l],keyin)==cribs[k][l])」と書かれている場所です。
73行目は、「dec=Decipher(cip[k][l],keyin);」と書かれている場所です。2 番目の for ループの else ステートメントの下。
ヘッダー ファイル コード:
#ifndef PROJ1_H
#define PROJ1_H
const int ALPHALEN = 26; // number of valid characters (A-Z)
const int MAXMSGLEN = 60; // maximum message length
const int NUMMSGS = 10; // number of messages
const int NUMCRIBS = 5; // number of cribs
const int MAXCRIBLEN = 8; // maximum crib length
const char cipher[NUMMSGS][MAXMSGLEN] = {
"HAAHJR HA KHDU AVTVYYVD",
"DHFGS NBKNBJ ZMC ZKK HR VDKK",
"Q PIDM JQMJMZ NMDMZ",
"JCTFGT DGVVGT HCUVGT UVTQPIGT",
"LRPYE I HTWW XPPE JZF LE ESP NZXXZYD",
"KLSQ GML LGG DSLW YGL FGLZAF AF EQ TJSAF",
"QEBC GUR ZVPEBSVYZ ORUVAQ GUR FGNGHR",
"GZSGZWD NX XTRJBMJWJ JQXJ FY UWJXJSY",
"RZVOCZM AJM OJHJMMJR HJMIDIB RVMH RDOC GJR XGJPYN",
"ROBO MYWO LKN XOGC DKVUSXQ DRSC KXN DRKD"
};
const char cribs[NUMCRIBS][MAXCRIBLEN] = {
"ATTACK",
"MEET",
"DROP",
"AGENT",
"WEATHER"
};
void Decipher(char cip[], char key);
char SolveCipher(const char cip[], char dec[]);
#endif
メインファイルのコード:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
#include "proj1.h"
char globeCip[MAXMSGLEN];
int main()
{
char dec_message[MAXMSGLEN];
for(int i=0; i<=NUMMSGS; i++)
{
strncpy(globeCip,cipher[i],MAXMSGLEN);
char mess=SolveCipher(globeCip[i],dec_message[i]);
if(mess=='\0')
{
cout<<"Message # "<<i<<": was not interesting "<<endl;
}
else
{
cout<<"Message # "<<i<<": "<<mess<<endl;
}
}
return 0;
}
void Decipher(char cip[], char key)
{
for(int j=0; j<strlen(cip); j++)
{
if(cip[j]-key<'A')
{
char diff=(key-'A')+key;
cip[j]=(cip[j]-key)+diff;
}
else
{
cip[j]=((((cip[j]-65)-key)%26)+65);
}
}
}
char SolveCipher(const char cip[], char dec[])
{
char keyin='A';
for(int i=0; i<26; i++)
{
keyin=keyin+i;
}
for(int k=0; k<NUMMSGS; k++)
{
for(int l=0; l<MAXMSGLEN; l++)
{
if(Decipher(cip[k][l],keyin)==cribs[k][l])
{
return '\0';
}
else
{
dec=Decipher(cip[k][l],keyin);
}
}
}
}