当前位置: 首页 > 知识库问答 >
问题:

在C中进行替换时输出的额外字符和符号

闽承望
2023-03-14

当我使用以下键运行代码时,会输出额外的字符。。。

终端窗口:$/替换ABCDEFGHJKLMNOPQRSTUVXYZI明文:heTUXWVI ii ssTt密文:heUVYXWJ jj TTUUUH|

这是说明(cs50替换问题)

设计并实现一个名为“替换”的程序,该程序使用替换密码对消息进行加密。

在名为“替换”的文件中实现程序。c位于~/pset2/substitution目录中。程序必须接受一个命令行参数,即用于替换的键。键本身应该不区分大小写,因此键中的任何字符是大写还是小写都不应该影响程序的行为。如果您的程序在执行时没有任何命令行参数,或者有多个命令行参数,那么您的程序应该打印一条您选择的错误消息(使用printf),并立即从main返回一个值1(通常表示错误)。如果密钥无效(例如不包含26个字符,不包含任何非字母字符,或不包含每个字母一次),您的程序应打印您选择的错误消息(使用printf),并立即从main返回值1。程序必须输出纯文本:(不带换行符),然后提示用户输入纯文本字符串(使用get_string)。您的程序必须输出密文:(不带换行符),后跟明文对应的密文,明文中的每个字母字符替换密文中的对应字符;非字母字符的输出应保持不变。您的程序必须保留大小写:大写字母必须保持大写字母;小写字母必须保留为小写字母。输出密文后,你应该打印一个换行符。然后,您的程序应该通过从main返回0退出。

我的代码:

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

int main(int argc,string argv[])
{
    char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    string key = argv[1];
    int totalchar = 0;

    for (char c ='a'; c <= 'z'; c++)
    {
        for (int i = 0; i < strlen(key); i++)
        {
            if (tolower(key[i]) == c)
            {
                totalchar++;
            }
        }
    }

    //accept only singular 26 key
    if (argc == 2 && totalchar == 26)
    {
        string plaint = get_string("plaintext: ");


        int textlength =strlen(plaint);
        char subchar[textlength];


        for (int i= 0; i< textlength; i++)
        {
            for (int j =0; j<26; j++)
            {
                // substitute

                if (tolower(plaint[i]) == alpha[j])
                {
                    subchar[i] = tolower(key[j]);

                    // keep plaintext's case
                    if (plaint[i] >= 'A' && plaint[i] <= 'Z')
                    {
                        subchar[i] = (toupper(key[j]));
                    }
                }

                // if isn't char
               if (!(isalpha(plaint[i])))
                {
                    subchar[i] = plaint[i];
                }
            }
        }

        printf("ciphertext: %s\n", subchar);
        return 0;
    }
    else
    {
        printf("invalid input\n");
        return 1;
    }



}

共有1个答案

养振濂
2023-03-14

strcmp比较两个字符串<代码>诉状[i]和alpha[j]是字符。可以与“常规”比较运算符进行比较,如=

 类似资料:
  • 问题内容: 输入文件: python代码: 问题: 如您所见,输出在每个项目之间都有多余的行。 如何预防呢? 问题答案: 追加一个换行符,并且输入行已经以换行符结尾。 一个标准的解决方案是逐字输出输入行: PS :对于Python 3(或具有打印功能的Python 2),abaront的解决方案是最简单的解决方案。

  • 在卸载时,需要恢复从注册中的某个项目中删除掉添加的内容,这可以使用字符串替换来实现,即使用空串替换掉添加的内容就可以了。NSIS本身提供的字符串函数是很少的,大多数字符串函数都是借助它强大的宏功能实现的。字符串替换可以使用StrRep来实现。StrRep函数包含在StrFunc.nsh文件中。在NSIS的例子中,有一个StrFunc.nsi就是介绍如何使用这些函数的。要实现字符串函数,需要包含St

  • 本文向大家介绍MATLAB输入字符串,在C中进行修改,然后输出,包括了MATLAB输入字符串,在C中进行修改,然后输出的使用技巧和注意事项,需要的朋友参考一下 示例 在此示例中,我们说明了MATLAB MEX中的字符串操作。我们将创建一个MEX函数,该函数接受来自MATLAB的字符串作为输入,将数据复制到C字符串中,对其进行修改,然后将其转换回mxArrayMATLAB端。 此示例的主要目的是说明

  • 问题内容: 我有一个要查看的列,其中包含带有换行符的字符串。我希望能够显式查看这些字符串中的和字符。有什么方法可以编写我的SQL查询,以告诉它输出带有换行符的字符串? 问题答案:

  • 《 C++ cout.put()》一节中,讲解了 ostream 类提供的 put() 成员方法的用法,其用于向输出流缓冲区中添加要输出的单个字符。而在某些场景中,我们还需要输出指定的字符串,这时可以使用 ostream 类提供的 write() 成员方法。 write() 成员方法专用于向输出流缓冲区中添加指定的字符串,初学者可以简单的理解为输出指定的字符串。其语法格式如下: ostream&w

  • 问题内容: 在python中,字符串可变吗?该行引发错误 TypeError:’str’对象不支持项目分配 我可以看到原因(因为我可以编写someString [3] =“ test”,这显然是非法的),但是在python中有没有这样做的方法? 问题答案: Python字符串是不可变的,这意味着它们不支持项目或切片分配。您将必须使用ie或其他合适的方法来构建新的字符串。