Не читаются символы

Не читаются 4 символа первые(шифрование)/последние(дешифрование), например, если зашифровать "-+=", при шаге 3 выходит "dfg", а должно "abc", хотя по подсчетам все верно, в чем дело ?

int main()
{
    int kod, num;
    string str = "abcedfghijklmnopqrstuvwxyz0123456789#!@$&*-+=", s; // str.size() = 45
    cout << "Введите 1 для шифрования или 2, если хотите дешифровать сообщение: "; cin >> kod;
    cin.get();
    if (kod == 1) {
        cout << "Введите сообщение, для шифрования: ";
        getline(cin, s);
        transform( s.begin(), s.end(), s.begin(), ::tolower);
        cout << "Введите шаг шифрования: "; cin >> num;

        for (int i = 0; i < s.size(); i++) {
            for (int j = str.size() - 1; j >= 0; j--) {
                if (s[i] == str[j] && (j + num) < str.size()) {
                    s[i] = str[j + num];
                }
                if (s[i] == str[j] && (j + num) >= str.size()) {
                    s[i] = str[j + num - (str.size() - 1)]; // Если сосчитать, при шифровании "=", шаге 3, то 44 + 3 - 44 - это символ c, а выдает g
                }
            }
        }
        cout << "Зашифрованное сообщение: " << s;
    }
    if (kod == 2) {
        cout << "Введите сообщение: "; cin >> s;
        transform( s.begin(), s.end(), s.begin(), ::tolower);
        cout << "Введите шаг дешифрования: "; cin >> num;

        for (int i = 0; i < s.size(); i++) {
            for (int j = 0; j < str.size(); j++) {
                if (s[i] == str[j] && (j - num) >= 0) {
                    s[i] = str[j - num]; 
                }
                else if (s[i] == str[j] && (j - num) < 0) {
                    s[i] = str[j - num + str.size()];
                }
            }
        }
        cout << "Дешифрованное сообщение: " << s;
    }
}

Ответы (1 шт):

Автор решения: AlexGlebe
  for (int i = 0; i < s.size(); i++) {
        for (int j = str.size() - 1; j >= 0; j--) {
                if (s[i] == str[j] && (j + num) < str.size()) {
                    s[i] = str[j + num];
                    break;    
                }
                if (s[i] == str[j] && (j + num) >= str.size()) {
                    s[i] = str[j + num - str.size()]; // уменьшить надо на число элементов полностью
                    break; // обязательно, второй раз может поменять.
                }
            }

      for (int i = 0; i < s.size(); i++) {
            for (int j = 0; j < str.size(); j++) {
                if (s[i] == str[j] && (j - num) >= 0) {
                    s[i] = str[j - num]; 
                    break;
                }
                else if (s[i] == str[j] && (j - num) < 0) {
                    s[i] = str[j - num + str.size()];
                    break;
                }
            }
        }
→ Ссылка