Я пытаюсь обфускать слово, которое хранится в строке, и мой код иногда работает, а иногда нет. Вот мой код:Странный символ появляется на выходе
// main function
int main(int argc, string argv[])
{
string k, plaintext;
int size, i = 0, key = 0;
k = argv[1];
size = strlen(k);
if (argc < 2 || !isNummeric(k, size) || k < 0)
return 1;
else
plaintext = GetString();
size = strlen(plaintext);
char ciphertext[size];
key = atoi(k);
while(i < size)
{
if (isalpha(plaintext[i]))
{
encipher(key, i, &ciphertext[i], plaintext);
}
else
{
ciphertext[i] = plaintext[i];
}
i++;
}
printf("%s\n",ciphertext);
}
Ключ от пользователя принимается перекладывать каждую букву, и мне нужно, чтобы проверить, является ли ключ числовое значение или нет, поэтому я сделал isNummeric
функцию, чтобы сделать
bool isNummeric(string k, int size)
{
int c=0;
for(int i=0; i<size; i++)
{
if(!isdigit(k[i]))
c++;
}
if(c==0)
return true;
return false;
}
Теперь, чтобы зашифровать я сделал функцию, чтобы переместить каждую букву:
void encipher(int k, int i, char *pt, string plaintext)
{
int p, c;
if(islower(plaintext[i]))
{
p=plaintext[i]-'a';
c=(p+k)%26;
*pt=c+97;
}
else
{
p=plaintext[i]-'A';
c=(p+k)%26;
*pt=c+65;
}
}
Первое наблюдение, вы ссылаетесь на 'argv [1]' перед тем, как вы проверите 'argc'. Что такое 'string'? Пожалуйста, покажите [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve), который показывает, что вы пробовали. –
'char ciphertext [size];' слишком короткий и не уничтожен. Изменение этого параметра на 'char ciphertext [size + 1] = {0};' должно помочь. –
Например, предположим, что секретный ключ, k, равен 13, а открытый текст p - это «Обязательно выпивайте свой Овалтин!». Давайте зашифруем это p с этим k, чтобы получить зашифрованный текст c, повернув каждую букву в p на 13 мест, в результате чего: Обязательно выпейте свой Овалтин! будет: Или fher gb qevax lbhe Binygvar! , но несколько раз он печатает что-то вроде изображения, которое я загрузил –