Я хочу принять вход от пользователя в
char input[200];
Затем я хочу поменять местами каждый символ этого ввода в соответствии с
a='y'; b='b'; c='j'; d='m'; e='x'; f='f'; g='w'; h='i';
i='v'; j='c'; k='l'; l='u'; m='t'; n='a'; o='k'; p='h';
q='d'; r='p'; s='s'; t='n'; u='z'; v='q'; w='e'; x='r';
y='o'; z='g';
Например, если вход
hello
Выход будет
ixuuk
Я хочу, чтобы код на C ++, используя для циклов и массивов.
Я предлагаю вам использовать массив поиска:
char output = conversion[input_char];
Вы можете упростить массив до 26 букв, используя некоторую арифметику:
char output = conversion[input_char - 'a'];
Выражение input_char - 'a'
делает письмо a
обратитесь к первому слоту в conversion
массив.
Вот пример массива:
static const char conversion[] =
{'b', 'y', 'c', 'k', 'f', /*...*/, 'a'};
Используя приведенный выше код, если ввод a
, вывод будет b
, Для ввода b
, вывод будет y
, и так далее.
Нет необходимости менять местами. Помните, что обмен меняет значения. Я верю что ты хочешь преобразование или же перевод вместо.
Вот демонстрационная программа, которая показывает, как это можно сделать
#include <iostream>
#include <cstring>
#include <utility>
int main()
{
std::pair<const char *, const char *> cipher =
{
"abcdefghijklmnopqrstuvwxyz",
"ybjmxfwivclutakhdpsnzqerog"};
const size_t N = 200;
char input[N];
input[0] = '\0';
std::cin.getline( input, sizeof( input ) );
std::cout << '\"' << input << '\"' << std::endl;
for ( char *p = input; *p; ++p )
{
if ( const char *q = std::strchr( cipher.first, *p ) )
{
*p = cipher.second[q - cipher.first];
}
}
std::cout << '\"' << input << '\"' << std::endl;
return 0;
}
Выход программы
"Hello""Hxuuk"
Вы также можете использовать функции tolower
или же toupper
преобразовать первоначально символы исходной строки в некоторый случай.
Решил проблему
#include <iostream>
#include <cstring>
#include <utility>
int main()
{
std::pair<const char *, const char *>
cipher ("abcdefghijklmnopqrstuvwxyz",
"ybjmxfwivclutakhdpsnzqerog");const size_t N = 200;
char input[N];
input[0] = '\0';
std::cin.getline( input, sizeof( input ) );
std::cout << '\"' << input << '\"' << std::endl;
for ( char *p = input; *p; ++p )
{
if ( const char *q = std::strchr( cipher.first, *p ) )
{
*p = cipher.second[q - cipher.first];
}
}
std::cout << '\"' << input << '\"' << std::endl;
return 0;
}
Отдельное спасибо @Vlad из Москвы
Я предлагаю вам использовать вложенный цикл.
создать массив строк, имеющих все алфавиты.
затем создайте другой массив строк, содержащий все символы, которые вы хотите изменить, с помощью алфавитов в том же порядке, что и алфавиты.
#include <iostream>
using namespace std;
int main()
{
string alphabets="abcdefghijklmnopqrstuvwxyz" ,
cipher="ybjmxfwivclutakhdpsnzqerog" , word , newword="" ;
cin>>word;
newword=word;
for(int i=0;i<26;i++)
{
for(int j=0;j<26;j++)
{
if(word[i]==alphabets[j])
{
newword[i]=cipher[j];
break;
}
}
}
cout<<newword;
return 0;
}