簡體   English   中英

在C#中替換多個字符

[英]Replacing multiple characters in C#

我將如何使用String.Replace方法編寫一個程序來旋轉元音? 意味着字母“ a”將是“ e”,“ e”將是“ i”,“ i”將是“ o”,“ o”將是“ u”,最后“ u”將是“ a”。

例如,單詞“ instructor”將是“ onstractur”。

按順序執行以下替換:

y-> @ u-> y o-> u i-> o e-> i a-> e @-> a

當然,@可以是保證不會在字符串中其他位置出現的任何字符。

類似myString.Replace("u","~").Replace("o","u").Replace("i","o").Replace("e","i").Replace("a","e").Replace("~","a")

假設字符串不包含~開頭。

很抱歉在家庭作業問題上張貼代碼,但有人說String.Replace無法完成,我想澄清一下。 關鍵是要確保沒有兩個元音被同一東西同時替換。 也就是說,當o變成uu必須已經是別的東西。 同樣,除非將a替換為其他內容,否則u不能成為a 引入一個額外的字符(在我的情況下為~ )似乎是解決此問題的最簡單方法。

我假設這是家庭作業,所以我給您一個解釋性的答案,而不是給您一個適當的代碼解決方案:

我建議您首先創建所有元音的列表或數組。 然后瀏覽原始字符串,並檢查每個字符是否存在於元音列表中。 如果是這樣,則將其替換為元音列表中的下一項(請確保在末尾環繞)

只需編寫一個循環,開關盒即可輕松解決您的問題。 這是家庭作業嗎? 您嘗試做些什么

每個元音都替換嗎? string.replace (向后進行以防止錯誤更換)

如果沒有魔術角色,向后移動仍然是一個問題。 參見norheim.se答案

y-> @ u-> y o-> u i-> o e-> i a-> e @-> a

也許其他人會生氣,因為我為您編寫了代碼。 但是要說的是,我在編程領域也很新手,而且我在這里有很多關於SO的問題,現在我覺得這很微不足道。

也許我的代碼不好,但是這是我將嘗試做到的方式:

using System;
namespace CommandLine{
class Test{

    [STAThread]
    static void Main(string[] Args)
    {
        Console.WriteLine("Enter the word: ");
        string regWord = Console.ReadLine();
        string vowWord = VowelWord(regWord);
        Console.WriteLine("Regural word {0} is now become {1}", regWord, vowWord);
        Console.ReadKey();

    }
    static string VowelWord(string word)
    {
        string VowelWord = string.Empty;
        char replChar;
        foreach (char c in word.ToCharArray())
        {
            switch(c)
            {
                    //'e' would be 'i', 'i' would be 'o', 'o' would be 'u', and finally 'u' would be 'a'.
                case 'a' : replChar = 'e' ;
                    break;
                case 'e': replChar = 'i';
                    break;
                case 'i': replChar = 'o';
                    break;
                case 'o' : replChar = 'u';
                    break;
                case 'u' : replChar = 'a';
                    break;
                default: replChar = c;
                    break;
            }

            VowelWord += replChar;
        }

        return VowelWord;

    }
    }
}

不幸的是,使用string並不會走的太遠。替換...最終所有元音都一樣(最終發現)。 您需要一次性完成所有更換。 您的教授給了您一個非常具有挑戰性的問題,考慮了所有方面……尤其是考慮到“無循環”要求。

如果對一個或多個字符使用占位符,則可以使用String.Replace。 這會使事情變得有些復雜和愚蠢,但是我認為這是許多開始編程問題的重點。

由於這是家庭作業,因此我會盡量堅持提示。 對正則表達式和Regex.Replace做一些研究。 您可能會在這里找到想要的東西。

編輯:剛看到您只能使用String.Replace。 對於那個很抱歉。 您必須使用占位符。

string str = "instructor";

請注意, str.Replace不會更改字符串。 而是返回帶有替換字符的新字符串

實際上,編寫以下行無濟於事,因為Replace的結果未保存在任何地方:

str.Replace('a', 'e');

要保留新結果,您需要一個指向它的變量:

string result;
result = str.Replace('a', 'e');

或者,您可以重復使用相同的變量:

str = str.Replace('a', 'e');

現在,可以在一行中完成此操作,但是我不會將其作為作業提交。使用臨時字符的更清晰解決方案可能是:

string str = "instructor";
char placeholder = '\u2609'; // same as '☉'

string result = str; //init value is same as str
result = result.Replace('u', placeholder);
result = result.Replace('o', 'u');
// ...
result = result.Replace(placeholder, 'a');

Console.WriteLine(result);

一個更通用的解決方案可能是使用數組來循環字符。 在這里,使用數組保存所有字符的位置:

string str = "instructor";
string result = str; //init value is same as str
char[] cycle = new char[] { '\u2609', 'u', 'o', 'i', 'e', 'a' };
for (int i = 0; i < cycle.Length; i++)
{
    int nextPosition = (i + 1) % cycle.Length;
    result = result.Replace(cycle[nextPosition], cycle[i]);
}
Console.WriteLine(result);

這樣做的好處是可以輕松地將其擴展為其他字符,並避免重復。 注意(i + 1) % cycle.Length是循環數組的常見技巧- %代表mod運算符,因此這使我可以在數組中的正確位置。

您想要的方法是String.Replace

聽起來有點像作業。

如果您發布的代碼顯示了您正在嘗試做的事情以及您在哪里遇到問題,則更有可能獲得答案,因為至少它表明您已經在嘗試找到解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM