第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

嘗試刪除字符時(shí)陷入無(wú)限循環(huán)

嘗試刪除字符時(shí)陷入無(wú)限循環(huán)

C#
慕的地6264312 2023-07-22 16:00:55
我正在開(kāi)展一個(gè)項(xiàng)目,將英語(yǔ)翻譯成豬拉丁語(yǔ),以更好地學(xué)習(xí)字符串。我正在努力解決的規(guī)則是:如果單詞以元音開(kāi)頭,只需在單詞末尾添加 way 即可。如果單詞以輔音開(kāi)頭,請(qǐng)將第一個(gè)元音之前的輔音移至單詞末尾并添加 ay。我可以讓元音起作用,但如果我達(dá)到一個(gè)常數(shù),我就會(huì)陷入無(wú)限循環(huán)。我對(duì)編程相當(dāng)陌生C#。任何解決這個(gè)問(wèn)題的幫助將不勝感激,并希望能幫助我理解資源。我嘗試過(guò)使用文本創(chuàng)建一個(gè) char 并使用文本創(chuàng)建一個(gè) int 來(lái)檢查每個(gè)字母。不太確定該怎么做。這是翻譯按鈕代碼:private void transBtn_Click(object sender, EventArgs e){    english = engTxtBx.Text;    english = english.Trim();    string[] columns = english.Split(' ');    for (int i = 0; i < columns.Length; i++)    {        string text = columns[i];        char first = text[0];        for (int c = 0; c < text.Length; c++)        {            char character = text[c];            //int consonant = text.IndexOf(character);            if (isVowel(first))            {                text = text + "way ";                pigLatin = text;                plTxtBx.Text += text;            }            else if (!isVowel(character))            {                if (isVowel(text[c + 1]))                {                    text.Remove(text.IndexOf(character), 1);                    text += character + "ay";                    pigLatin = text;                    plTxtBx.Text += text;                }                break;            }        }    }public static bool isVowel(char c){    return new[] {'a','e','i','o','u'}.Contains(char.ToLower(c));}如果我輸入短語(yǔ)“Can I have an apple”,則應(yīng)從第一個(gè)字符中刪除“see”并移動(dòng)到末尾,并在后面添加“ay”?,F(xiàn)在,當(dāng)我調(diào)試時(shí),c 沒(méi)有被刪除,而是添加到末尾并添加了 ay。然后它就卡在了“我”上。
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

我做了一些更改以使其正常工作。請(qǐng)參閱我在代碼中的注釋。


private void transBtn_Click(object sender, EventArgs e)


{

    english = engTxtBx.Text;

    english = english.Trim();

    string[] columns = english.Split(' ');

    for (int i = 0; i < columns.Length; i++)

    {

        if (isVowel(columns[i][0]))

        {

            // Start with vowel.

            pigLatin = columns[i] + "way";

        }

        else

        {

            // Start with consonant. Get index of first vowel.

            int index = columns[i].IndexOfAny(vowels);

            if (index == -1)

            {

                // No vowel in columns[i].

                // You have to decide what to do.

            }

            else if (index == 1)

            {

                // First vowel is the second letter.

                pigLatin = columns[i].Substring(1) + columns[i][0] + "way";

            }

            else

            {

                // First vowel is after the second letter.

                pigLatin = columns[i].Substring(index) + columns[i].Substring(index - 1, 1) + "way";

            }


        }

        plTxtBx.Text += pigLatin;

    }


}


private static char[] vowels = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };


private static bool isVowel(char c)

{

    return vowels.Contains(c);

}


查看完整回答
反對(duì) 回復(fù) 2023-07-22
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

所以羅伯特提供了一個(gè)修復(fù)程序,但既然你說(shuō)你是編程新手,我將嘗試解釋這個(gè)問(wèn)題,并且我將嘗試用你正在做的事情的簡(jiǎn)化示例來(lái)實(shí)現(xiàn):


string text = "Hello!";

for(int i = 0; i < text.Length; i++)

{

     text += "!";

}

您的循環(huán)條件基于 text.Length,但在循環(huán)內(nèi),您將附加到該文本,因此每次循環(huán)準(zhǔn)備再次開(kāi)始時(shí),它都會(huì)檢查 text.Length 并說(shuō):“好吧,我 - 仍然 - 不在 text.Length 的末尾,所以我想我會(huì)繼續(xù)循環(huán)。


如果您只想根據(jù)初始字符數(shù)進(jìn)行循環(huán),您應(yīng)該:


A. 在循環(huán)之前將 text.Length 存儲(chǔ)到單獨(dú)的變量中,然后將循環(huán)條件基于它,如下所示:


string text = "Hello!";

int initialLength = text.Length;

for(int i = 0; i < initialLength; i++)

{

     text += "!";

}

B. 或者更好的是,不要將更多內(nèi)容附加到文本變量上,而是使用單獨(dú)的字符串變量作為“修改后的”副本:


string text = "Hello!";

string text2 = text;

for(int i = 0; i < text.Length; i++)

{

     text2 += "!";

}

C. 或者最好采用方法 B,但使用 StringBuilder 類(lèi)。在 C# 中,當(dāng)您修改字符串時(shí),系統(tǒng)會(huì)在內(nèi)存中創(chuàng)建字符串的全新副本以及額外的字符,因此:


text = "Hello";

text += "!";

text += "!";

text += "!";

...實(shí)際上是在內(nèi)存中創(chuàng)建四個(gè)不同的字符串變量:


你好你好!你好!!你好?。。?/p>


這是暫時(shí)的事情,但效率低且浪費(fèi)。StringBuilder 類(lèi)旨在允許您逐段高效地構(gòu)建字符串:


StringBuilder sb = new StringBuilder("Hello");

sb.Append("!");

sb.Append("!");

sb.Append("!");

Console.WriteLine(sb.ToString()); // "Hello!!!"

因此,如果您查看示例 B,您可能會(huì)將其更改為:


string text = "Hello!";

StringBuilder sbText = new StringBuilder(text);

for(int i = 0; i < text.Length; i++)

{

     sbText.Append("!");

}

我的最終建議是也按照您想要的方式獲取字符串/內(nèi)容,然后將其分配給您的控件。所以不要調(diào)用這個(gè) 10 次:


 plTxtBx.Text += text;

相反,以正確的方式設(shè)置文本,然后在最后,只需做一個(gè)簡(jiǎn)單的分配:


 plTxtBx.Text = final_text;

原因是控件具有各種事件以及當(dāng)您修改文本等屬性時(shí)運(yùn)行的小齒輪和齒輪。如果您使用 += 技巧將文本附加到 Textbox 控件,那么每次更新文本時(shí)都會(huì)強(qiáng)制該控件運(yùn)行其整個(gè)例程。


這些都是很小的低效率問(wèn)題,但隨著時(shí)間的推移,它們會(huì)逐漸增加,因此最好提前做好這些工作。


因此,如果我采用羅伯特提出的代碼(我沒(méi)有親自測(cè)試過(guò))并對(duì)其進(jìn)行一些更改,我會(huì)這樣做:


private void transBtn_Click(object sender, EventArgs e)

{

    // Start with whatever is in plTxtBx

    StringBuilder sb = new StringBuilder(plTxtBx.Text); 


    // Break into words

    string[] columns = engTxtBx.Text.Trim().Split(' ');

    for (int i = 0; i < columns.Length; i++)

    {

        if (isVowel(columns[i][0]))

        {

            // Start with vowel.

            sb.Append(columns[i]);

            sb.Append("way");

        }

        else

        {

            // Start with consonant. Get index of first vowel.

            int index = columns[i].IndexOfAny(vowels);

            if (index == -1)

            {

                // No vowel in columns[i].

                // You have to decide what to do.

            }

            else if (index == 1)

            {

                // First vowel is the second letter.

                sb.Append(columns[i].Substring(1));

                sb.Append(columns[i][0]);

                sb.Append("way");

            }

            else

            {

                // First vowel is after the second letter.

                sb.Append(columns[i].Substring(index));

                sb.Append(columns[i].Substring(index - 1, 1));

                sb.Append("way");

            }


        }

    }


    // Update plTxtBx's Text once with the final results

    plTxtBx.Text = sb.ToString();


}


查看完整回答
反對(duì) 回復(fù) 2023-07-22
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)