如何在c#net 4.0上进行音译?
我是编程新手。这是我的代码:如何在c#net 4.0上进行音译?,c#,.net-4.0,C#,.net 4.0,我是编程新手。这是我的代码: public string ThanglishToTamilList(char[] characters, int length) { var dict1 = new Dictionary<string, string>(); dict1.Add("a", "\u0B85"); // அ dict1.Add("aa", "\u0B86"); // ஆ dict1.Add("A", "\
public string ThanglishToTamilList(char[] characters, int length) {
var dict1 = new Dictionary<string, string>();
dict1.Add("a", "\u0B85"); // அ
dict1.Add("aa", "\u0B86"); // ஆ
dict1.Add("A", "\u0B86"); // ஆ
dict1.Add("i", "\u0B87"); // இ
dict1.Add("ee", "\u0B88"); // ஈ
dict1.Add("I", "\u0B88"); // ஈ
dict1.Add("u", "\u0B89"); // உ
...
List<String> list = new List<String>();
string[] array;
var valueOfDictOne = "";
for (int i = 0; i < length; i++)
{
try
{
valueOfDictOne = dict1[characters[i].ToString()];
list.Add(valueOfDictOne);
}
catch
{
list.Add(characters[i].ToString());
}
}
array = list.ToArray();
string result = string.Join("", array);
return result;
}
公共字符串thanglishtamillist(字符[]个字符,整数长度){
var dict1=新字典();
第1条.添加(“a”,“\u0B85”);//அ
第1条添加(“aa”,“u0B86”);//ஆ
第1条添加(“A”,“\u0B86”);//ஆ
第1条添加(“i”,“u0B87”);//இ
第1条添加(“ee”,“u0B88”);//ஈ
第1条添加(“I”,“u0B88”);//ஈ
第1条添加(“u”,“u0B89”);//உ
...
列表=新列表();
字符串[]数组;
Dictone的var值=”;
for(int i=0;i
功能参数详细信息:
public string ThanglishToTamilList(char[] characters, int length) {
var dict1 = new Dictionary<string, string>();
dict1.Add("a", "\u0B85"); // அ
dict1.Add("aa", "\u0B86"); // ஆ
dict1.Add("A", "\u0B86"); // ஆ
dict1.Add("i", "\u0B87"); // இ
dict1.Add("ee", "\u0B88"); // ஈ
dict1.Add("I", "\u0B88"); // ஈ
dict1.Add("u", "\u0B89"); // உ
...
List<String> list = new List<String>();
string[] array;
var valueOfDictOne = "";
for (int i = 0; i < length; i++)
{
try
{
valueOfDictOne = dict1[characters[i].ToString()];
list.Add(valueOfDictOne);
}
catch
{
list.Add(characters[i].ToString());
}
}
array = list.ToArray();
string result = string.Join("", array);
return result;
}
char[]字符:字符数组(textbox.text.ToCharArray())
int length:数组的长度。(我们在文本框中键入的字符数)
我的预期输出应该是:
public string ThanglishToTamilList(char[] characters, int length) {
var dict1 = new Dictionary<string, string>();
dict1.Add("a", "\u0B85"); // அ
dict1.Add("aa", "\u0B86"); // ஆ
dict1.Add("A", "\u0B86"); // ஆ
dict1.Add("i", "\u0B87"); // இ
dict1.Add("ee", "\u0B88"); // ஈ
dict1.Add("I", "\u0B88"); // ஈ
dict1.Add("u", "\u0B89"); // உ
...
List<String> list = new List<String>();
string[] array;
var valueOfDictOne = "";
for (int i = 0; i < length; i++)
{
try
{
valueOfDictOne = dict1[characters[i].ToString()];
list.Add(valueOfDictOne);
}
catch
{
list.Add(characters[i].ToString());
}
}
array = list.ToArray();
string result = string.Join("", array);
return result;
}
如果用户键入->输出,则应为அ.
同样地:
a->அ
aa->ஆ
A->ஆ
请注意,aa和A表示相同的值ஆ
我的问题:
此代码仅替换一个字符(a->அ), 这个很好用
但是如果我们输入aa,输出是அஅ
aa->அஅ
但是我需要正确的输出
aa->ஆ
我为此添加了一些代码行。但这不起作用:
...
for (int i = 0; i < length; i++)
{
try
{
if (String.Equals(characters[i], "a") && !(String.Equals(characters[i], "aa")))
{
//MessageBox.Show("a");
valueOfDictOne = dict1[characters[i].ToString()];
list.Add(valueOfDictOne);
}
else if (String.Equals(characters[i], "aa"))
{
//MessageBox.Show("aa");
valueOfDictOne = dict1[characters[i].ToString()];
list.Add(valueOfDictOne);
}
}
catch
{
list.Add(characters[i].ToString());
}
}
。。。
for(int i=0;i
请帮助我纠正这段代码,或者请提供任何简单的音译方法
谢谢。我认为你应该彻底改变你的方法来有效地解决这个问题。基于一个字符会给你无效的结果,因为有些序列以字典中已经存在的有效序列开始 我认为您应该做的是,只要有有效的字典条目,就向某个临时字符串添加字符。如果附加到此临时字符串的下一个字符在字典中不存在,则您将处理字符串替换并从新的临时字符串开始。
当然,这个解决方案在某些方面并不理想-如果我们有string
aaa
应该如何处理它?解决方案假设首先使用最长的匹配表达式(第一点),但它不是必要的有效方法
+aa
a
+a
aa
+a
+a
a
foreach(char character in characters)
{
if (!substitutionDict.ContainsKey(tempString + character))
{
makeSubstitution(tempString, substitutionDict[tempString]);
tempString = String.Empty;
}
tempString += character;
}
编辑:这种方法主要适用于打字时的处理。我不确定这种解决方案对于较长文件的性能。在处理已经创建的文件时,最好换个角度看:寻找模式并替换它们
foreach (string pattern in substitutionDict.Keys.OrderByDesc(x => x.Length))
{
makeSubstitution(pattern, substitutionDict[pattern]);
}
我认为你们应该彻底改变你们的方法来有效地解决这个问题。基于一个字符会给你们带来无效的结果,因为有些序列是从字典中已经存在的有效序列开始的 我认为您应该做的是,只要有有效的字典条目,就向某个临时字符串添加字符。如果附加到此临时字符串的下一个字符在字典中不存在,则您将处理字符串替换并从新的临时字符串开始。
当然,这个解决方案在某些方面并不理想-如果我们有string
aaa
应该如何处理它?解决方案假设首先使用最长的匹配表达式(第一点),但它不是必要的有效方法
+aa
a
+a
aa
+a
+a
a
foreach(char character in characters)
{
if (!substitutionDict.ContainsKey(tempString + character))
{
makeSubstitution(tempString, substitutionDict[tempString]);
tempString = String.Empty;
}
tempString += character;
}
编辑:这种方法主要适用于打字时的处理。我不确定这种解决方案对于较长文件的性能。在处理已经创建的文件时,最好换个角度看:寻找模式并替换它们
foreach (string pattern in substitutionDict.Keys.OrderByDesc(x => x.Length))
{
makeSubstitution(pattern, substitutionDict[pattern]);
}
您可以使用一个简单的解析器/词法分析器来标记输入字符串。然后您的
thanglishtamillist
函数如下所示:
...
TextReader r = new StringReader(characters);
Lexer l = new Lexer(r, defs);
while (l.Next())
{
list.Add(dict1[l.TokenContents]);
}
...
您可以在这里找到一个简单解析器/词法分析器的示例:
对于您的问题来说,这可能有些过分,但它应该可以完成工作。您可以使用一个简单的解析器/词法分析器来标记输入字符串。然后,您的
thanglishtamillist
函数如下所示:
...
TextReader r = new StringReader(characters);
Lexer l = new Lexer(r, defs);
while (l.Next())
{
list.Add(dict1[l.TokenContents]);
}
...
您可以在这里找到一个简单解析器/词法分析器的示例:
对于您的问题来说,这可能有点过头了,但它应该可以完成任务。您是否有一个keydown/keypress事件调用整个事件?如果是这样的话,它可能只是两次调用您的函数“a”…1