#c #arrays #string #random
#c #массивы #строка #Случайный
Вопрос:
Я пишу программу для обратного преобразования строки и вставки случайных символов между ними. Вот мой код: main.cpp
#include <iostream>
#include <chrono>
#include <thread>
#include "encrypter.cpp"
using namespace std;
int main(int argc, char *argv[])
{
char message[256];
this_thread::sleep_for(chrono::milliseconds(1000));
cout << "Make sure theres no one around you" << endl;
this_thread::sleep_for(chrono::milliseconds(1000));
cout << "Enter secret message ";
cin.get(message, 256);
cout << "message encrypted" << endl;
enc(message);
return 0;
}
encrypter.cpp
#include <iostream>
#include <string>
int getRandom(int a, int b) {
return a (rand() % static_cast<int>(b - a 1));
}
using namespace std;
void enc(char message[256]) {
int i = 0;
int len = strlen(message);
int revlen = len - 1;
int wtpselector;
int charselector;
int encsim;
char randchar[6] = "@#$%amp;";
char strreved[256];
char strenc[1024];
while (i < len) {
strreved[revlen] = message[i];
i ;
revlen--;
}
revlen = strlen(strreved);
len = revlen - 1;
i = 0;
encsim = 0;
while (i < revlen) {
wtpselector = getRandom(0, 4);
charselector = getRandom(0, 4);
if (wtpselector == 0) {
strenc[encsim] = strreved[i];
i ;
encsim ;
} else {
strenc[encsim] = randchar[charselector];
encsim ;
}
}
cout << strenc << endl;
}
Но на выходе есть много случайных символов, которых там не должно быть и которых нет в программе.
Нравится:
Input: hello world
Output: $%@$#amp;amp;damp;amp;@%$%1%row amp;#$$@%amp;ol@%#@%amp;1%amp;#$amp;#ehe$%%€@@8@amp;%@$#amp; #%@@%amp;¢amp;@%#amp;#$#@$#%%##amp;%#@amp;#amp;$8%#$#@#$@$@#%amp;amp;@amp;#@Q#$$#amp;¢%@% Q##amp;$@#{amp;amp;amp;amp;$@¢ $$$$@@@@@#amp;amp;amp;%%amp;amp;%{ $@¢v#amp;@amp;~u@@@@%amp;%¢
Пожалуйста, помогите!!!
Комментарии:
1. Есть ли какая-либо причина, по которой вы не используете
std::string
вместо массивов символов? Это значительно упростит задачу.2. Вы, кажется, забыли, что
char
строки в C действительно называются строками с нулевым завершением .3. Потому что это учебный проект о массивах символов.
Ответ №1:
Вы упустили две важные вещи:
- когда вы объявляете массив, его значения не определены (независимо от того, что находится в памяти)
- strlen засчитывается до первого появления символа »
Для того, чтобы ваш код работал, вы должны инициализировать массивы символов, что означает изменение этих двух строк:
char strreved[256];
char strenc[1024];
Для:
char strreved[256] = {0};
char strenc[1024] = {0};
Комментарии:
1. в чем разница между одним, имеющим пробел, и другим, которого нет? Также это исправит ошибку со случайными символами?
2. Пробел не имеет к этому никакого отношения, только вопрос стиля (я это исправил).