Консультация № 202957
31.05.2022, 15:58
0.00 руб.
2 2 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.png
результат 2.png

Обсуждение

давно
Советник
400484
472
01.06.2022, 19:38
общий
Добрый день.
А где в вашем коде перевод с русского на транслит?
[code lang=csharp] 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);
}[/code]
Тут вы ищете только английские буквы. Этот метод не подходит для поиска русских.
Добавьте метод для перевода с русского на транслит.

Удачи!
давно
Советник
400484
472
03.06.2022, 11:21
общий
это ответ
Добрый день.
А где в вашем коде перевод с русского на транслит?
[code lang=csharp] 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);
}[/code]
Тут вы ищете только английские буквы. Этот метод не подходит для поиска русских.
Добавьте метод для перевода с русского на транслит.
Форма ответа