基本的に私は、それぞれの文字をint 'k'離れた文字で置き換えるだけのシーザー暗号を作成する必要があります。これは2つのコマンドライン引数をとります: './caesar'と 'k'。これはユーザによって与えられます。それはうまく動作します。それは がCaesar Cipherは文字を繰り返します
正しいキーとして4を使用して「FeVJss」として「BaRFoo」を暗号化し、それを暗号化しません正しいキーとして3を使用して「EDUIRR」として「BARFOO」を暗号化し
:が、1つの問題があります"barfoo"を "onesbb"として65をキーとして "oonneess | bb | bb"として暗号化します。
句読点に注意してください。帽子など。
ここに問題がありますか?他のランダムな言葉に対してもこれを行います。文字を繰り返します。助けてください....
PS:私のコードで見ることができるように、プログラミングには全く新しいので、英語で説明してください!
#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");
}
この情報は以下のとおりです:a> - 'a' –
ヘルプme ....確かに!デバッガの下でコードを実行し、失敗したケースを実行します。 –
あなたは "c = a + k;"と書いています。 kが1000の場合はどうなりますか?あなたが手紙の数を渡す場合?あなたは%演算子を使っています。 – JoulinRouge