Ich versuche, Wort zu verschleiern, die in Zeichenfolge gespeichert ist und mein Code funktioniert manchmal und manchmal nicht. Hier ist mein Code:Strange char erscheint in der Ausgabe
// main function
int main(int argc, string argv[])
{
string k, plaintext;
int size, i = 0, key = 0;
k = argv[1];
size = strlen(k);
if (argc < 2 || !isNummeric(k, size) || k < 0)
return 1;
else
plaintext = GetString();
size = strlen(plaintext);
char ciphertext[size];
key = atoi(k);
while(i < size)
{
if (isalpha(plaintext[i]))
{
encipher(key, i, &ciphertext[i], plaintext);
}
else
{
ciphertext[i] = plaintext[i];
}
i++;
}
printf("%s\n",ciphertext);
}
Ein Schlüssel vom Benutzer empfangen wird jeden Buchstaben zu verschieben, und ich brauche, um zu überprüfen, ob der Schlüssel numerischer Wert ist oder nicht, so habe ich isNummeric
Funktion zu tun, dass
bool isNummeric(string k, int size)
{
int c=0;
for(int i=0; i<size; i++)
{
if(!isdigit(k[i]))
c++;
}
if(c==0)
return true;
return false;
}
Nun chiffrieren ich Funktion gemacht jeden Buchstaben zu verschieben:
void encipher(int k, int i, char *pt, string plaintext)
{
int p, c;
if(islower(plaintext[i]))
{
p=plaintext[i]-'a';
c=(p+k)%26;
*pt=c+97;
}
else
{
p=plaintext[i]-'A';
c=(p+k)%26;
*pt=c+65;
}
}
Erste Beobachtung, Sie verweisen auf "argv [1]", bevor Sie "argc" überprüfen. Was ist "Schnur"? Zeigen Sie das [Minimale, vollständige und überprüfbare Beispiel] (http://stackoverflow.com/help/mcve) an, das zeigt, was Sie versucht haben. –
'char ciphertext [size];' ist einer zu kurz und ist nicht abgeschlossen. Ändern Sie es in 'Char ciphertext [Größe + 1] = {0};' sollte helfen. –
Angenommen, der geheime Schlüssel, k, ist 13 und der Klartext, p, lautet "Achten Sie darauf, Ihren Ovaltine zu trinken!" Lassen Sie uns das p mit dem k verschlüsseln, um den Chiffretext c zu erhalten, indem Sie jeden Buchstaben in p um 13 Stellen drehen, wobei: Achten Sie darauf, Ihren Ovaltine zu trinken! wird: Oder fher gb qevax lbhe Binygvar! aber einige Male druckt es so etwas wie in dem Bild ich hochgeladen –