алгоритм — ввод «кобры» выводить «dpcsb» Перевод одного символа в следующий переполнение стека

проблема в:
Напишите простую программу для шифрования текстовой строки с использованием справочной таблицы или простого алгоритма; например, текстовая строка «Hello World» может быть зашифрована в строку «ifmmp xpqme» просто путем перевода каждого символа в следующую букву алфавита

  char inputwords[100];
char *words;
char y='w';
int x=0;

cout<<"Enter word: ";
cin>>inputwords;

words=&inputwords[0];for(int ctr=0;ctr<100;ctr++)
{
if(*(words+ctr)+1==1||*(words+ctr)+1==-51)
cout<<" ";
else
cout<<char(*(words+ctr)+1);
}

Вот фрагмент кода
Моя проблема заключается в том, что когда я ввожу «Hello World», вывод будет только «ifmmp», и он игнорирует «World». Помогите 🙁

0

Решение

cin с помощью >> на входном потоке читает только первое слово, которое в вашем случае это просто Hello пропуская World, Таким образом, чтобы прочитать всю строку из нескольких слов в char массив inputwords использовать,

cin.getline(inputwords, sizeof(inputwords));

for цикл повторяется 100 время независимо от того, какая у вас входная строка, что приведет к появлению мусорных значений после строки.

Вы должны обработать регистр, например, если между двумя словами есть пробел, оставьте то же самое и не увеличивайте его, чтобы !,

2

Другие решения

Вы кодируете в C ++. использование std::string и алгоритмы STL вместо старомодных массивов C и созданных вручную циклов.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
//encryption function, maths may be wrong.
auto f=[](char &x){x=(x+1)%255;};

//decryption function, maths may be wrong too.
auto g=[](char &x){x=(x-1)%255;};

std::string s;
std::getline(std::cin,s);

std::cout<<s<<std::endl;
std::for_each(std::begin(s),std::end(s),f);
std::cout<<s<<std::endl;

std::for_each(std::begin(s),std::end(s),g);
std::cout<<s<<std::endl;
return 0;
}

Редактирование: C ++ 11, требуемый для лямбды, может быть легко адаптирован для использования с компилятором C ++ 03.

Изменить 2: увидеть это в действии там -> http://ideone.com/SjeVaQ

1

  1. Используйте getline вместо cin, чтобы получить всю строку вместо первого слова.
  2. Итерация до конца строки, а не произвольный 0.
  3. Сравните с исходным значением, а не с +1. Не проверяйте, если ток +1 равен 1, проверяйте, если ток равен 0.

    char *itr = inputwords;
    for ( ; *itr; ++itr ) {
    char curr = *itr;
    }
    
    1. Не забудьте обработать ‘z’ и ‘Z’
0
По вопросам рекламы [email protected]