Если на входе обнаружена строчная буква, как ее можно преобразовать в верхний регистр перед шифрованием в C? - PullRequest
0 голосов
/ 28 апреля 2019

Я работаю над программой подстановочного шифра.Для этого я использую две функции.

Одна функция получает индекс шифра каждой буквы в сообщении (строке), а другая шифрует все сообщение целиком, используя значения из предыдущей функции.

В моей программе, если на входе найдена буква нижнего регистра, она должна быть преобразована в верхний регистр перед шифрованием.Моя проблема в том, что я не могу этого сделать.Моя текущая программа выводит все только строчными буквами.

Я попытался использовать toupper безуспешно и хотел бы знать, как я могу достичь упомянутой цели.Любая форма помощи будет принята с благодарностью.Заранее спасибо.

//This loop converts the message lower case.
for(int i = 0; i < txtlength; i++)
    {
        int index = toupper(text[i]) - 'z'; 

        if(index >= 0 & index < 26)
    {
        text[i] = cipher[index];
    }
        else
    {
        text[k] = text[k]; 
    }
  }

1 Ответ

0 голосов
/ 28 апреля 2019

Таблица символов ASCII показывает, что строчная буква «a» - это char (97), а строчная буква «A» - это char (65). Итак, для преобразования из строчных в строчные, добавьте 32:

if (text[i] >= 65 && text[i] < 91) {
  text[i] += 32;
}

изменить: добавить вместо вычитать

Вот более полный, рабочий пример:

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


int main() {
    char caesar[26] = {'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','a'};
    char text[32] = {'W','g','o','W','K','I','y','X','T','J','U','P','S','f','Y','z','d','x','t','r','j','c','p','I','P','W','I','e','N','J','T'};
    char lower[32] = {0};
    char cipher[32] = {0};

    printf("Original text is      %s\n", text);

    for (int i = 0; i < 32; i++) {
        int index;
        /* Use `tolower` from ctype.h
        {
            lower[i] = tolower(text[i]);
            index = lower[i] - 'a';
        }
        */

        /* Roll your own `tolower` */
        {
            index = (int)text[i];
            /* convert uppers to lowers */
            if (index >= 65 && index < 91) {
                index += 32;
            }
            lower[i] = index;
            /* remove offset from chars */
            index -= (int)'a';
        }
        cipher[i] = caesar[index];
    }

    printf("Lowercase text is     %s\n", lower);

    printf("Caesar ciphertext is  %s\n", cipher);

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