C# 用于克隆输出的循环
我对C#很陌生,你可能会从我的问题中注意到这一点。我一直在做一个“Røverspråk”-译者来学习一些基础知识。“Røverspråk”有点像猪拉丁语:规则是你用辅音+o+辅音交换每个辅音。到目前为止一切都很好,这一部分很有效。当我试图把它翻译回来时,我的问题来了 “totimom”应返回“tim”,但应返回以下内容:C# 用于克隆输出的循环,c#,.net,for-loop,C#,.net,For Loop,我对C#很陌生,你可能会从我的问题中注意到这一点。我一直在做一个“Røverspråk”-译者来学习一些基础知识。“Røverspråk”有点像猪拉丁语:规则是你用辅音+o+辅音交换每个辅音。到目前为止一切都很好,这一部分很有效。当我试图把它翻译回来时,我的问题来了 “totimom”应返回“tim”,但应返回以下内容:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII。因此,它将每个字母返回38倍——与我的konsonant字符串(挪威konsonants)中的数量相同
字符串kons=“bcdfghjklmnpnpqrstvwzbcdfghjklmnpqrstvwz”
为什么每回38次?就我所知,for循环是分开的,就像在我的转换器中一样。给我带来麻烦的代码:
public void OversettTilbake(string vok, string kons)
{
string nyText = textBox2.Text.ToString().ToLower();
for (int e = 0; e < nyText.Length; e++)
{
for (int f = 0; f < kons.Length; f++)
{
if (nyText[e] == kons[f])
{
newText2.Add(nyText[e].ToString());
e = e + 2;
}
}
for (int g = 0; g < kons.Length; g++)
{
if (nyText[e] != kons[g])
{
newText2.Add(nyText[e].ToString());
}
}
}
}
public void oversettilbake(字符串vok,字符串kon)
{
字符串nyText=textBox2.Text.ToString().ToLower();
for(int e=0;e
工作的译者:
public int Oversetter(string text, string vok, string kons)
{
int Count = 0;
char tom = ' ';
for (int e = 0; e < text.Length; e++)
{
for (int i = 0; i < kons.Length; i++)
{
if (text[e] == kons[i])
{
newText.Add((text[e]).ToString() + "o" + (text[e]).ToString().ToLower());
Count = Count + 1;
}
}
for (int i = 0; i < vok.Length; i++)
{
if (text[e] == vok[i])
{
newText.Add((text[e]).ToString());
Count = Count + 1;
}
}
if (text[e] == tom)
{
newText.Add(text[e].ToString() + (text[e].ToString()));
}
for (int i = 0; i < tegn.Length; i++)
{
if (text[e] == tegn[i])
{
newText.Add((text[e]).ToString());
}
}
}
return Count;
}
public int Oversetter(字符串文本、字符串vok、字符串kon)
{
整数计数=0;
char-tom='';
for(int e=0;e
编辑:谢谢这里所有精彩的输入。我真的学到了很多。@cahinton的这个解决方案似乎工作得很好,我也不难理解和实施:
for(var e = 0; e < nyText.Length; e += 1) {
newText2.Add(nyText[e].ToString);
if(kons.Contains(nyText[e])) {
e += 2;
}
for(变量e=0;e
}
编辑2:我没有必要在这里投票。但是非常感谢大家!我希望在下周内得到一两个答案,所以我不得不说我被这里的社区给淹没了。再次感谢 问题在于“g”循环:几乎每个辅音都会出现不匹配
而是修改“f”循环,将“found”布尔值设置为“true”(在循环之前初始化为“false”)。如果找不到辅音,那么它是元音(或其他字符),因此可以添加(一次!)
编辑
int e = 0;
while (e < nyText.Length) // changed 'for' into 'while'
{
bool found = false;
for (int f = 0; f < kons.Length; f++)
{
if (nyText[e] == kons[f])
{
newText2.Add(nyText[e].ToString());
e = e + 3;
found = true;
break; // break out of the 'for' loop: no need to test further after a match
}
}
// no need for an extra 'mismatch-loop'
if (!found)
{
newText2.Add(nyText[e].ToString());
e = e + 1;
}
}
inte=0;
while(e
问题在于“g”循环:几乎每个辅音都会出现不匹配
而是修改“f”循环,将“found”布尔值设置为“true”(在循环之前初始化为“false”)。如果找不到辅音,那么它是元音(或其他字符),因此可以添加(一次!)
编辑
int e = 0;
while (e < nyText.Length) // changed 'for' into 'while'
{
bool found = false;
for (int f = 0; f < kons.Length; f++)
{
if (nyText[e] == kons[f])
{
newText2.Add(nyText[e].ToString());
e = e + 3;
found = true;
break; // break out of the 'for' loop: no need to test further after a match
}
}
// no need for an extra 'mismatch-loop'
if (!found)
{
newText2.Add(nyText[e].ToString());
e = e + 1;
}
}
inte=0;
while(e
以下代码有效,甚至只需要一个循环,因为您可以使用IndexOf
在字符串中搜索。还请注意,由于辅音数组定义为同时包含大写和小写字母,因此没有理由将输入转换为小写。第三,不要在方法中使用TextBox
,而应该传入要转换为参数的字符串
static string kons = "BCDFGHJKLMNPQRSTVWZbcdfghjklmnpqrstvwz";
public static string OversettTilbake(string nyText)
{
int stringIndex = 0;
string result = String.Empty;
while (stringIndex < nyText.Length)
{
result += nyText[stringIndex];
if (kons.IndexOf(nyText[stringIndex]) > -1)
{
stringIndex += 3;
}
else
{
stringIndex++;
}
}
return result;
}
实际上,您的代码很容易简化为只使用一个循环,因为规则是一个辅音替换为3个字母。所以,只要你遇到一个辅音,把它加到结果中,跳过两个字母。就这样
请注意,在TextBox.Text
上调用ToString
是不必要的,因为Text
已经是一个字符串。以下代码有效,甚至只需要一个循环,因为您可以使用IndexOf
在字符串中搜索。还请注意,由于辅音数组定义为同时包含上半音和下半音
var newText2 = new StringBuilder();
string nyText = "totesostot1";
const string kons = "BCDFGHJKLMNPQRSTVWZbcdfghjklmnpqrstvwz";
// Loop through each leter
for (int e = 0; e < nyText.Length; e++)
{
// Print the letter
newText2.Append(nyText[e].ToString(CultureInfo.InvariantCulture));
// If the letter exists in kons, skip the next 2 letters
if (kons.Any(t => nyText[e] == t))
{
e = e + 2;
}
}
Console.WriteLine(newText2);
public string OversettTilbake(string kons)
{
string nyText = textBox2.Text.ToString().ToLower();
for (int f = 0; f < kons.Length; f++)
nyText = nyText.Replace((kons[f] + "o" + kons[f]), kons[f].ToString());
return nyText;
}
for(var e = 0; e < nyText.Length; e += 1) {
newText2.Add(nyText[e].ToString());
if(kons.Contains(nyText[e])) {
e += 2;
}
}
HashSet<char> kons = new HashSet<char>() {'B', 'C', 'D', /* etc... */ };