циклы — Как я могу поменять символы целого предложения с пользовательским вводом в C ++?

Я хочу принять вход от пользователя в

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 ++, используя для циклов и массивов.

-4

Решение

Я предлагаю вам использовать массив поиска:

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, и так далее.

Нет необходимости менять местами. Помните, что обмен меняет значения. Я верю что ты хочешь преобразование или же перевод вместо.

1

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

Вот демонстрационная программа, которая показывает, как это можно сделать

#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 преобразовать первоначально символы исходной строки в некоторый случай.

0

Решил проблему

#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 из Москвы

0

Я предлагаю вам использовать вложенный цикл.
создать массив строк, имеющих все алфавиты.
затем создайте другой массив строк, содержащий все символы, которые вы хотите изменить, с помощью алфавитов в том же порядке, что и алфавиты.

    #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;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector