string - 在C语言中进行替换时输出的多余字符和符号

标签 string error-handling comparison cs50 substitution

当我使用以下键运行代码时,将输出多余的字符...
终端窗口:
$ ./substitution abcdefghjklmnopqrsTUVWXYZI
明文:heTUXWVI ii ssTt
密文:heUVYXWJ jj ttUuh |
这是说明(cs50替换问题)
设计和实现一个替代程序,该程序使用替代密码对消息进行加密。
在〜/pset2/substitution目录中的一个名为replacement.c的文件中实现您的程序。
您的程序必须接受一个命令行参数,即用于替换的键。键本身应该不区分大小写,因此键中的任何字符都是大写还是小写都不会影响程序的行为。
如果您的程序在执行时没有任何命令行参数或带有多个命令行参数,则您的程序应打印您选择的错误消息(带有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;
    }



}

最佳答案

strcmp比较两个字符串。 plaint[i]alpha[j]是字符。可以与“常规”比较运算符(例如==)进行比较。

关于string - 在C语言中进行替换时输出的多余字符和符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63098591/

相关文章:

java - 检查一个字符串是否与另一个字符串相似

1 到 100 之间的正则表达式数

java - 比较字符串时出现问题

c++ - C 字符串和 std::string 之间的转换导致平台特定方式出现乱码

jquery - JSONP请求错误处理

php - 使用@时跳过报告错误(错误控制运算符)

Python - doctest 与 unittest

c# - 处理应用程序错误问题

command-line - 用于 XML 架构 (XSD) 比较的 FOSS(命令行)工具?

ios - 将 ViewController 与 swift 中的类型进行比较