它只是不起作用。你能指出什么是错的吗?当我运行它时,我得到:
jharvard@appliance (~/Dropbox/pset2): ./vigenere bacon
Meet me at the park
ARTU [R \T aW` ^NaL
这显然是错误的。我花了无数个小时。这是代码:
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc,string argv[])
{
if(argc!=2)
{
printf("Usage: /home/cs50/pset2/caesar <key>\n");
return 1;
}
else
{
char *k = argv[1];
string p = GetString();
int klen = strlen(k);
for(int i=0; i<klen;i++)
{
if(isupper(k[i]))
{
k[i] = k[i]-65;
}
else if (islower(k[i]))
{
k[i] = k[i]-97;
}
}
for(int i=0, n=strlen(p); i<n;i++)
{
if(isupper(p[i]))
{
printf("%c", (((p[i]-65)+(k[i%klen]-65))%26)+65);
}
else if (islower(p[i]))
{
printf("%c", (((p[i]-97)+(k[i%klen])-97)%26)+97);
}
else
{
printf("%c", p[i]);
}
}
printf("\n");
}
}
答案 0 :(得分:1)
如评论中所述,p
上的循环代码应为:
每条评论编辑:代码适合跳过非alpha字符
int j = 0
for(int i=0, n=strlen(p); i<n;i++)
{
if(isupper(p[i]))
{
printf("%c", (((p[i]-65)+(k[j%klen]))%26)+65);
j += 1
}
else if (islower(p[i]))
{
printf("%c", (((p[i]-97)+(k[j%klen]))%26)+97);
j += 1
}
else
{
printf("%c", p[i]);
}
}
./vigenere bacon
Meet me at the park
的输出应为:
Negh zf av huf pcfx