Попробуйте использовать + = в строке, чтобы сложить символы в C - PullRequest
0 голосов
/ 02 апреля 2020

Я знаю, это звучит очень глупо, но это потому, что я только что слегка научился Java и Python в прошлом году ...

Теперь я пытаюсь сделать C правильно с CS50.

на 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;
}

Спасибо за помощь newb ie!

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

с помощью strncat () вы можете добавить символы в существующую строку. (strncat (строковая строка назначения, постоянная строковая строка, сумма символов, которые вы хотите добавить из источника))

0 голосов
/ 02 апреля 2020

В C нельзя добавлять строки, как в других языках высокого уровня. Вы должны использовать специальную функцию в string.h. Как strcat (first_string, second_string);

Альтернатива: char * strncat (char * dest, const char * sr c, size_t n) для добавления первых n символов (вы можете интерпретировать size_t как int ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...