Преобразование содержимого массива символов в значения ключей ASCII

#c #arrays

Вопрос:

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

 #include <iostream>
#include <string>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    string Message;
    char arr[Message.length()   1];

    cout << "Please Enter The Text You Would Like To Encrypt(seperate words using _ and only write in lower case)" << endl;
    cin >> Message;

    strcpy(arr, Message.c_str());

    int Length = string(arr).length();
    
}
 

Комментарии:

1. После std::cin >> Message; Message[0] этого содержит число , представляющее первый символ; Message[1] содержит число, представляющее второй символ; и так далее. Вам не нужно ничего делать, чтобы получить числовые значения. И вы можете редактировать значения непосредственно в Message строке. Тебе это не нужно arr .

2. Кроме того, в точке, где arr определено, Message пусто, как Message.length() 1 и 1. И размер массива должен быть константой времени компиляции, поэтому вы не можете создать массив в стиле C с размером, определенным во время выполнения. Да, ваш компилятор может разрешить это как нестандартное расширение; не рассчитывайте на это. Если вы решите, что вам действительно нужен массив, используйте std::vector<char> arr(Message.length() 1); .

3. Вы сохранили его как строку s. Вот что std::cin >> Message; делает. Цифры Message[0] указаны в Message[1] , и т. Д. Вы можете их изменить. Попробовать это .

4. Я удалил arr в соответствии с вашим предложением при написании, как вы предлагаете, как мне это сделать относительно длины Message , так как ее длина будет отличаться при каждом запуске программы

5. Это не форум. Напиши какой-нибудь код. Если вы не можете заставить его работать, опубликуйте его и задайте вопрос.

Ответ №1:

Мне удалось решить эту проблему, взяв длину строки и сохранив ее в переменной, объявленной как целое число, для хранения длины строки, которую я использовал в сообщении.Length()чтобы получить длину строки, я затем создал цикл for для повторения длины строки, которую я затем объявил

 int ASCII_Converter = int(Message[i])   offset
 

Это принимает значение i и использует его в соответствующей позиции в сильном и добавляет смещение

Оператор if используется для проверки того, где значение ASCII равно 95, чтобы добавить пробел в текст

затем он распечатывает зашифрованную строку

 #include <iostream>
#include <string>

using namespace std;

int main()
{
    int Offset;
    string Message;

    cout << "Please Enter The Key 1-25" << endl;
    cin >> Offset;
    cout << "Please Enter The Text You Would Like To Encrypt(seperate words using _)" << endl;
    cin >> Message;

    int StringLength = Message.length();

    for (int i = 0; i < StringLength;   i)
    {
        int ASCII_Converter = int(Message[i])   Offset;

        if(int(Message[i]) == 95)
        {
            cout << " ";
        }

        cout << char(ASCII_Converter) << "";
    }
    cout << "" << endl;
}