与维吉尼斗争! (在 C 中)二进制表达式('int *' 和 'int')和其他东西的无效操作数

Posted

技术标签:

【中文标题】与维吉尼斗争! (在 C 中)二进制表达式(\'int *\' 和 \'int\')和其他东西的无效操作数【英文标题】:Struggling with Vigenere! (In C) invalid operands to binary expression ('int *' and 'int') and other things与维吉尼斗争! (在 C 中)二进制表达式('int *' 和 'int')和其他东西的无效操作数 【发布时间】:2017-09-15 11:39:09 【问题描述】:

我们现在正在与凯撒合作,维吉尼。我设法完成了凯撒,但维吉内尔的工作效果不佳。 C 还给我:二进制表达式的无效操作数('int *' 和 'int')。我不确定该程序的确切含义以及我的代码有什么问题。有人可以帮助我或给我建议吗?我想是因为我不能用不同类型的数字来计算?我不确定!

#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, string argv[])

if (argc != 2)

    printf("You have to input a key, try again!\n");
    return 1;


string key = argv[1];
int keylength = strlen(key);

for (int i = 0; i < keylength; i++)

    if (!isalpha(argv[1][i]))
    
        printf("Please insert letters, nothing else\n");
        return 1;
    


printf("plaintext: ");
string plain = get_string();


int keycipher[keylength];
for(int i = 0; i < keylength; i++)

    keycipher[i] = toupper(key[i]) - 65;


if (plain != 0)

    printf("ciphertext: ");
    int i;
    for (i = 0, keylength = strlen(key); i < keylength; i++)
    
        if (isupper(plain[i]))
        
            printf("%c", (plain[i] - 65 + keycipher) % 26);
        
        else if (islower(plain[i]))
        
            printf("%c", (plain[i] - 97 + keycipher) % 26);
        
        else if (plain[i] == ' ')
        
            printf(" ");
        
        else
        
            printf("%c", plain[i]);
        
    

return 0;

【问题讨论】:

+ keycipher --> + keycipher[index] 纯文本似乎比密钥长,明文使用密钥长度似乎是不正确的。所以不可能使用它们共有的索引。 你应该在cs50网站上提问吗?也可以使用edit 链接... 见this 【参考方案1】:

如 cmets 中所述,您必须使用 + keycipher[index] 而不是 + keycipher。这是因为keycipher 是一个数组,您一次只需要使用一个数组元素。

此外,在找到ciphertext 的部分中,您将需要 2 个计数器变量,而不仅仅是一个。这是因为您需要在每次迭代中增加plaintext 索引和key 索引,但是一旦plaintext 长度超过key 长度,您将需要重置键索引。 如果您查看规格,您就会明白我所说的使用 2 个计数器。

【讨论】:

以上是关于与维吉尼斗争! (在 C 中)二进制表达式('int *' 和 'int')和其他东西的无效操作数的主要内容,如果未能解决你的问题,请参考以下文章

33线性空间07——四个基本子空间的基与维数

C++ 维吉尼密码

离散与维灾难

在一维数组中写维吉尼广场

数栈技术分享:开源·数栈-扩展FlinkSQL实现流与维表的join

专利中的“吉尼斯”记录