Не читаются символы
Не читаются 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;
}
}
}