Консультация онлайн # 202957

Раздел: .NET Framework / C# / Java
Автор вопроса: Rivarez (Посетитель)
Дата: 31.05.2022, 15:58 Консультация неактивна
Поступило ответов: 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Я написал программу которая должна переводить из русских букв в английские, но она делает обратное: переводит из английских в русские
Как это исправить?
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Threading.Tasks;

namespace Translit

{
    public class TranslitMethods
    {
        public class Translitter
        {
            private List<TranslitSymbol> TranslitSymbols { get; set; }

            /// <summary>
            /// Метод транслитерации русского текстав
            /// </summary>
            /// <param name="source">Исходная строка на русском</param>
            /// <param name="type">Тип транслитерации</param>
            /// <returns></returns>
            public string Translit(string source, TranslitType type)
            {
                var result = "";

                for (var i = 0; i < source.Length; i++)
                {
                    result = result +
                    (TranslitSymbols.FirstOrDefault(x => x.SymbolEng == source[i].ToString() && x.TranslitType == type) == null
                    ? source[i].ToString()
                    : TranslitSymbols.First(x => x.SymbolEng == source[i].ToString() && x.TranslitType == type).SymbolRus);
                }

                return result;
            }
            public Translitter()
            {
            
                this.TranslitSymbols = new List<TranslitSymbol>();

                string сurs = System.IO.File.ReadAllText(@"D:\Transliteration.txt");
                
                // Заполняем сопоставления по транслитерации
                foreach (string item in сurs.Split(","))
                {
                    string[] symbols = item.Split(":");
                    this.TranslitSymbols.Add(new TranslitSymbol
                    {
                        TranslitType = TranslitType.сurs,
                        SymbolRus = symbols[0].ToLower(),
                        SymbolEng = symbols[1].ToLower(),

                    });
                    this.TranslitSymbols.Add(new TranslitSymbol
                    {
                        TranslitType = TranslitType.сurs,
                        SymbolRus = symbols[0].ToUpper(),
                        SymbolEng = symbols[1].ToUpper()
                        
                    });
                    
                }

            }
        }

        public enum TranslitType
        {
            сurs
        }

        // Описание элемента справочника транскрипций
        private class TranslitSymbol
        {
            public TranslitType TranslitType { set; get;  }
            public string SymbolEng { set; get; }
            public string SymbolRus { set; get;  }
        }
    }
}
namespace Translit
{
    class Program
    {
        static void Main(string[] args)

        {
            //string val = "perevod.txt";
            
            Console.Write("Введите фразу: ");
            string val = Console.ReadLine();
            Console.WriteLine("Оригинал: " + val);
            TranslitMethods.Translitter trn = new TranslitMethods.Translitter();
            Console.WriteLine("Транслитерация: " + trn.Translit(val, TranslitMethods.TranslitType.сurs));

            Console.ReadKey();
        }
    }
}


Результаты представлены в виде скриншотов

Ответ # 1, solowey (Советник)

Добрый день.
А где в вашем коде перевод с русского на транслит?
Код [C#]
               for (var i = 0; i < source.Length; i++)
                {
                    result = result +
                    (TranslitSymbols.FirstOrDefault(x => x.SymbolEng == source[i].ToString() && x.TranslitType == type) == null
                    ? source[i].ToString()
                    : TranslitSymbols.First(x => x.SymbolEng == source[i].ToString() && x.TranslitType == type).SymbolRus);
                }

Тут вы ищете только английские буквы. Этот метод не подходит для поиска русских.
Добавьте метод для перевода с русского на транслит.

solowey

Советник
03.06.2022, 11:21
Нет оценки ответа

Мини-форум консультации # 202957

solowey

Советник

ID: 400484

326421

= общий =    01.06.2022, 19:38
Добрый день.
А где в вашем коде перевод с русского на транслит?
Код [C#]
               for (var i = 0; i < source.Length; i++)
                {
                    result = result +
                    (TranslitSymbols.FirstOrDefault(x => x.SymbolEng == source[i].ToString() && x.TranslitType == type) == null
                    ? source[i].ToString()
                    : TranslitSymbols.First(x => x.SymbolEng == source[i].ToString() && x.TranslitType == type).SymbolRus);
                }

Тут вы ищете только английские буквы. Этот метод не подходит для поиска русских.
Добавьте метод для перевода с русского на транслит.

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