#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;
}