Grundsätzlich muss ich eine Caesar-Chiffre erstellen, die nur jeden Buchstaben mit einem Buchstaben ersetzt, der int 'k' entfernt ist. Dies erfordert 2 Befehlszeilenargumente: './caesar' und 'k', die vom Benutzer angegeben werden. es funktioniert gut; hat aber ein Problem:Caesar Cipher wiederholt Buchstaben
es „BARFOO“ als „EDUIRR“ mit 3 als Schlüssel verschlüsselt, die korrekt ist „BaRFoo“ als „FeVJss“ verschlüsselt 4 als Schlüssel verwendet, die korrekt ist
aber nicht verschlüsseln "barfoo" als "onesbb" mit 65 als Schlüssel verschlüsselt es als "oonneess | bb | bb".
Bitte beachten Sie die Interpunktion; die Kappen und so weiter.
Sehen Sie das Problem hier? es tut dies auch für andere zufällige Wörter; es wiederholt Buchstaben. Hilf mir ....
PS: Ich bin extrem neu in der Programmierung, wie Sie in meinem Code sehen können, bitte versuchen Sie es auf Englisch zu erklären!
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, string argv[])
{
string s;
//int d;
int c;
int a;
if(argc != 2)
{
printf("Please run with a command line argument.");
return 1;
}
else
{
s = GetString();
}
int k = atoi(argv[1]);
for(int i = 0; i < strlen(s); i++)
{
a = s[i];
if(a<'A'||a>'z')
{
printf(" ");
}
else
{
if(a>='A'&&a<='Z')
{
c = a+k;
while(c>'Z')
{
c = 'A'+(c-'Z')-1;
printf("%c", c);
}
if(c<='Z')
{
printf("%c", c);
}
}
else if(a>-'a'&&a<='z')
{
c = a+k;
while(c>'z')
{
c = 'a'+(c-'z')-1;
printf("%c", c);
}
if(c<='z')
{
printf("%c", c);
}
}
}
}
printf("\n");
}
Was ist das: a> - 'a' –
Hilf mir .... sicher! Führen Sie Ihren Code unter Ihrem Debugger aus und gehen Sie durch den fehlgeschlagenen Fall. –
Sie haben geschrieben "c = a + k;" Was passiert, wenn k 1000 ist? Wenn Sie die Anzahl der Buchstaben übergeben? Sie haben den Operator% verwendet. – JoulinRouge