Замена букв со смещением

dima2121

Client
Регистрация
09.02.2020
Сообщения
138
Благодарностей
14
Баллы
18
Добрый день, нужно сделать замену всех букв в предложение со смещение в + или - сторону
Например:
"Привет" со смешение +3 будет "Тулезх"
сделал все это на кубиках, но получилось громоздко и проблема получилась в том, что вставляешь предложение а итоговый вариант получается все буквы слитные без отступов и знаков препинания
Скриншот 04-12-2020 231045.jpg


подумал что на С# можно сделать все на много проще, и нашел на другом форуме вот такую тему ( https://www.cyberforum.ru/csharp-beginners/thread1072413.html )
в теме есть код
Код:
using System;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Console.WriteLine("hello world"); 
            Console.WriteLine(caesar("hello world", 9));// сдвинем на 9 позиций вправо
            Console.WriteLine(caesar(caesar("hello world", 9), -9));//расшифруем
            Console.ReadLine();
        }
 
        public static string caesar(string s, int shift)
        {
            StringBuilder sb = new StringBuilder();
            shift = (shift < 0) ? 26+shift : shift; //для отрицательных смещений
            foreach (char c in s.ToLower()) //пройдемся по всем буквам
            {
                int t;
                t = ( c == ' ') ? ' ' : (((c - 'a') + shift) % 26) + 'a'; // пробелы не будем трогать, работаем
//работаем с маленькими английскими буквами, всего их 26, а первая буква а
                sb.Append((char)t); //добавим текущий символ к результату и возьмем следующий.
            }
            return sb.ToString(); //вернем сдвинутую строку
        }
    }
}
но он как я понял под вижуал студио, а можно его как-то под зенку подстроить ?
 

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 472
Благодарностей
575
Баллы
113
Добрый день, нужно сделать замену всех букв в предложение со смещение в + или - сторону
Например:
"Привет" со смешение +3 будет "Тулезх"
сделал все это на кубиках, но получилось громоздко и проблема получилась в том, что вставляешь предложение а итоговый вариант получается все буквы слитные без отступов и знаков препинания
Посмотреть вложение 68313

подумал что на С# можно сделать все на много проще, и нашел на другом форуме вот такую тему ( https://www.cyberforum.ru/csharp-beginners/thread1072413.html )
в теме есть код
Код:
using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("hello world");
            Console.WriteLine(caesar("hello world", 9));// сдвинем на 9 позиций вправо
            Console.WriteLine(caesar(caesar("hello world", 9), -9));//расшифруем
            Console.ReadLine();
        }

        public static string caesar(string s, int shift)
        {
            StringBuilder sb = new StringBuilder();
            shift = (shift < 0) ? 26+shift : shift; //для отрицательных смещений
            foreach (char c in s.ToLower()) //пройдемся по всем буквам
            {
                int t;
                t = ( c == ' ') ? ' ' : (((c - 'a') + shift) % 26) + 'a'; // пробелы не будем трогать, работаем
//работаем с маленькими английскими буквами, всего их 26, а первая буква а
                sb.Append((char)t); //добавим текущий символ к результату и возьмем следующий.
            }
            return sb.ToString(); //вернем сдвинутую строку
        }
    }
}
но он как я понял под вижуал студио, а можно его как-то под зенку подстроить ?
 

Вложения

  • Спасибо
Реакции: orka13 и Alexmd

dima2121

Client
Регистрация
09.02.2020
Сообщения
138
Благодарностей
14
Баллы
18
Даже оказалось еще проще чем я думал, спасибо большое
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
string text = "Привет, Zennolab! Не понимаю, зачем мне нужен этот код)))";
string chars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
int s = 3;// на сколько смещать
string result = string.Empty;
for(int i = 0;  i <  text.Length; i++){
    bool toup = false;
    char c = text[i];
    if(char.IsLetter(text,i)){
        if(char.IsUpper(text, i)){
            c = char.ToLower(c);
            toup = true;
        }
        if(chars.Contains(c)){
            try{
                c = chars[chars.IndexOf(c)+s];
            }
            catch{
                c = chars[(chars.IndexOf(c) - (chars.Length-1))+s];
            }
        }
        if(toup)
            c = char.ToUpper(c);
        result += c;
    }
    else result += c;
}
return result;
А у меня в лоб.
 
  • Спасибо
Реакции: orka13 и dima2121

dima2121

Client
Регистрация
09.02.2020
Сообщения
138
Благодарностей
14
Баллы
18
C#:
string text = "Привет, Zennolab! Не понимаю, зачем мне нужен этот код)))";
string chars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
int s = 3;// на сколько смещать
string result = string.Empty;
for(int i = 0;  i <  text.Length; i++){
    bool toup = false;
    char c = text[i];
    if(char.IsLetter(text,i)){
        if(char.IsUpper(text, i)){
            c = char.ToLower(c);
            toup = true;
        }
        if(chars.Contains(c)){
            try{
                c = chars[chars.IndexOf(c)+s];
            }
            catch{
                c = chars[(chars.IndexOf(c) - (chars.Length-1))+s];
            }
        }
        if(toup)
            c = char.ToUpper(c);
        result += c;
    }
    else result += c;
}
return result;
А у меня в лоб.
Спасибо больше
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)