尝试在字符串上使用 += 来在 C 中堆叠字符

Try to use += on string to stack char(s) in C

我知道这听起来很愚蠢,但这是因为我去年刚刚学了 Java 和 Python...

现在我正在尝试用 CS50 正确地做 C。

第2周有凯撒密文程序任务

我尝试在字符串上使用 += 来逐个堆叠字符。

当然没用。

但是有没有其他类似的方法呢?

这是代码

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


string encipher(string x, int y);


int main(int argc, string argv[])
{
    string key = argv[1];
    bool num_flag = false;

    for (int i = 0; i < strlen(key); i++)
    {
        int k = isdigit(key[i]);
        if (k == 0)
        {
            num_flag = true;
        }

    }

    if (num_flag == true)
    {
        printf("Usage: ./caesar key\n");
    }
    else
    {
    int keys = atoi(argv[1]);

    string c = get_string("plaintext: ");
    string ciphertext = encipher(c, keys);
    printf("ciphertext: %s\n", ciphertext);
    }
}


string encipher(string x, int y)
{
    string cip = "";
    for (int i = 0; i < strlen(x); i++)
    {
        int low = islower(x[i]);
        int upper = isupper(x[i]);

        if (low != 0)
        {
            char lo = x[i] - 97;
            char c = (lo + y) % 26;
            char l = c + 97;
            cip += l;
        }
        else if (upper != 0)
        {
            char up = x[i] - 65;
            char c = (up + y) % 26;
            char u = c + 65;
            cip += u;
        }
        else
        {
            cip += x[i];
        }
    }
    return cip;
}

.

我修改了代码通过了测试,但也不完美...

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


string encipher(string x, int y);


int main(int argc, string argv[])
{



    if(argc != 2)
    {
        printf("Usage: ./caesar key\n");
    }
    else
    {
        string key = argv[1];
        bool num_flag = false;

        for (int i = 0; i < strlen(key); i++)
        {
            int k = isdigit(key[i]);
            if (k == 0)
            {
                num_flag = true;
            }
        }

        if (num_flag == true)
        {
            printf("Usage: ./caesar key\n");
        }
        else
        {
            int keys = atoi(argv[1]);

            string c = get_string("plaintext: ");
            string cipher = encipher(c, keys);
            printf("ciphertext: %s\n", cipher);
        }
    }
}


string encipher(string x, int y)
{

    for (int i = 0; i < strlen(x); i++)
    {
        int low = islower(x[i]);
        int upper = isupper(x[i]);

        if (low != 0)
        {
            char lo = x[i] - 97;
            char c = (lo + y) % 26;
            char l = c + 97;
            x[i] = l;
        }
        else if (upper != 0)
        {
            char up = x[i] - 65;
            char c = (up + y) % 26;
            char u = c + 65;
            x[i] = u;
        }
    }
    return x;
}

感谢新手的帮助!

在 C 中,您不能像其他高级语言那样添加字符串。您必须在 string.h 中使用特殊功能。喜欢 strcat(first_string, second_string);

另一种方法是:char *strncat(char *dest, const char *src, size_t n) 添加前 n 个字符(您可以像 int 一样解释 size_t)。

您可以使用 strncat() 向现有字符串添加字符。 ( strncat(char DESTINATION STRING, const char SOURCE STRING, AMOUNT OF CHARS YOU WANT TO ADD FROM THE SOURCE) )