C# 用于克隆输出的循环

C# 用于克隆输出的循环,c#,.net,for-loop,C#,.net,For Loop,我对C#很陌生,你可能会从我的问题中注意到这一点。我一直在做一个“Røverspråk”-译者来学习一些基础知识。“Røverspråk”有点像猪拉丁语:规则是你用辅音+o+辅音交换每个辅音。到目前为止一切都很好,这一部分很有效。当我试图把它翻译回来时,我的问题来了 “totimom”应返回“tim”,但应返回以下内容:TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

我对C#很陌生,你可能会从我的问题中注意到这一点。我一直在做一个“Røverspråk”-译者来学习一些基础知识。“Røverspråk”有点像猪拉丁语:规则是你用辅音+o+辅音交换每个辅音。到目前为止一切都很好,这一部分很有效。当我试图把它翻译回来时,我的问题来了

“totimom”应返回“tim”,但应返回以下内容:
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... */ };