@korsamc

Изначальный массив обрезается после функции копирования почему?

Написать программу для кодировки (раскодировки) текста по
принципу «дополнения»: в англоязычном тексте буква a меняется на букву
z, буква b меняется на букву y, буква c меняется на букву x и т.д.
И если не сложно можете подсказать как передать функцию revers в функцию crypt.
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string.h>
#include <locale>
#include <cctype>
using namespace std;

void abc(char _abc[])
{
    int i,j = 0;
    for(int i = 97; i < 123;++i)
        _abc[j++] = (char)i;
    _abc[j] = '\0';
}

void revers(char _abc[])
{
   int temp;
   int i;
   for(i=0;i<strlen(_abc)/2;i++)
   {
       temp = _abc[i];
       _abc[i] = _abc[strlen(_abc)-i-1];
       _abc[strlen(_abc)-i-1] = temp;
   }

}
void crypt(char *msg,char *_abc,char* _abcReverse,char *cryptArray)
{
    int i,j;
    int index[strlen(msg)] ;
    for(i=0;i<strlen(msg);i++)
    {
        for(j=0;j < strlen(_abc);j++)

            {if (_abc[j] == msg[i]) index[i] = j;}
    }
    for(i=0;i<strlen(msg);i++) cout << index[i] << " "; // массив заполянется нулями


}
void out(char str[])
{
    for(int i = 0; i < strlen(str);i++) cout << str[i] << " ";
}
int main()
{
    char _abc[25]="";
    char _abcReverse[25] = "";
    char msg[] = "abc";
    char *crypArray = new char[strlen(msg)];
    abc(_abc);
    out(_abc);
    cout << endl;
    strcpy(_abcReverse,_abc); // после копирования масива исходный массив обрезается и в нём остаётся один символ
    revers(_abcReverse);
    out(_abcReverse);
    cout << endl;
    crypt(msg,_abc,_abcReverse,crypArray);
    cout << endl;
    system("pause");
    return 0;
}
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Alexander1705
#include <iostream>

void encode(char *msg)
{
    for (int i = 0; msg[i]; ++i)
    {
        msg[i] = 'z' - (msg[i] - 'a');
    }
}

int main()
{
    char msg[] = "hello";
    encode(msg);
    std::cout << msg << std::endl;
}


P.S. Не используйте system("pause"). Это не предназначено для того, для чего вы его используете. И вообще никогда не должно использоваться.
Ответ написан
@MiiNiPaa
char _abc[25]="";
В латинском алфавите 26 букв + нулевой символ = 27. У вас классическое переполнение буфера. Скорее всего лишние буквы пишутся в память массива _abcReverseю и когда _abcReverse стал использоваться по предназначению, лишние символы были перезаписаны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы