проблема в:
Напишите простую программу для шифрования текстовой строки с использованием справочной таблицы или простого алгоритма; например, текстовая строка «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». Помогите 🙁
cin
с помощью >>
на входном потоке читает только первое слово, которое в вашем случае это просто Hello
пропуская World
, Таким образом, чтобы прочитать всю строку из нескольких слов в char
массив inputwords
использовать,
cin.getline(inputwords, sizeof(inputwords));
for
цикл повторяется 100
время независимо от того, какая у вас входная строка, что приведет к появлению мусорных значений после строки.
Вы должны обработать регистр, например, если между двумя словами есть пробел, оставьте то же самое и не увеличивайте его, чтобы !
,
Вы кодируете в 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 равен 1, проверяйте, если ток равен 0.
char *itr = inputwords;
for ( ; *itr; ++itr ) {
char curr = *itr;
}