2010-05-27 260 views
0

如何使用String.Replace方法編寫一個程序來旋轉單詞中的元音?意思是'a'是'e','e'是'我','我'是'o','o'是'u',最後'u'是'a'。替換多個字符

例如,「導師」一詞應該是「onstractur」。

+0

這是你收到的面試問題嗎? =) – RPM1984 2010-05-27 06:14:13

+4

你試過了嗎?如果你去寫一些代碼,如果你有問題,回來,我們會幫你。 – 2010-05-27 06:16:01

+4

我希望你沒有打算使用它來加密。 – Kobi 2010-05-27 07:23:21

回答

1

只需編寫一個循環和一個開關盒即可輕鬆解決您的問題。這是作業嗎?什麼是你在試圖

2

我假設的努力,這是家庭作業,所以我會給你一個解釋的答案,而不是給你一個正確的代碼解決方案:

我建議你先創建所有的列表或數組元音。然後,查看原始字符串,並檢查每個字符是否存在於元音列表中。如果是,則將其替換爲元音列表中的下一項(確保您在最後環繞)

+0

這是一個家庭作業問題。我做了6次替換,但每次我嘗試調試時,它只執行我最後的替換語句。你懂我的意思嗎? – Yassin 2010-05-27 06:21:00

+1

@ Yassin:不,請發佈您正在使用的代碼。 – 2010-05-27 06:23:54

+0

所以「指導員」是即時通訊使用的詞。 字符串。替換('a','e') string.replace('e','i') string.replace('i','o') string.replace('o','u') string.replace('u','a') 然後由於某種原因,單詞教師會讀取「asntractar」。它只執行我最後的命令。 – Yassin 2010-05-27 06:30:54

0

聽起來有點像功課。

如果您發佈的代碼顯示您正在嘗試做什麼以及您遇到問題的哪個位置更容易得到答案,至少表明您已嘗試找到解決方案。

1

做每個元音的替換? string.replace。 (向後做,以防止錯誤的替換)

向後仍然是一個沒有魔法字符的問題。見norheim.se回答

Ÿ - > @ U->Ÿ鄰>üI-> 0 E->我A->ë@ - >一個

+0

即使如此:-)你成爲(第一步),a成爲e(最後一步) – riffnl 2010-05-27 06:28:20

+0

我不認爲這會有所作爲,因爲順序不重要 – Yassin 2010-05-27 06:39:09

+0

,這個評論正是你爲什麼只認爲最後的命令將執行:-) String.Replace不是你的朋友在這裏,除非你使用「魔術」字符(如nordheim.se建議)。 – riffnl 2010-05-27 06:49:29

6

做如下替換,爲了:

ý - > @ U->ý 鄰 - >û I-> 0 E->我 A->ë @ - >一個

當然,@可以是任何保證不會發生的字符在字符串中。

+0

不錯......我想他不得不使用一個以上的替換角色,但你只有一個......很好。 – 2010-05-27 07:14:29

+0

這個很好。我認爲我的解決方案也容易想到,但可以是很多代碼:) – vodkhang 2010-05-27 11:12:35

1

也許其他人會因爲我寫代碼給你發脾氣而生氣。但有人說,我在編程世界裏也是新手,很多時候我在這裏對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; 

    } 
    } 
} 
+0

謝謝,但我不允許使用循環既不 – Yassin 2010-05-27 07:00:49

+1

@ Yassin:你沒有這麼說 – vodkhang 2010-05-27 11:13:10

1

不幸的是,你是不會走得很遠用......與string.replace你會結束所有的元音都是相同的(正如你所發現的)。您需要一次完成所有替換。你的教授給你一個相當具有挑戰性的問題,考慮所有事情......特別是考慮到「無環」要求。

如果您爲一個或多個字符使用佔位符字符,則可以使用String.Replace。它會讓事情變得有點複雜和愚蠢,但我認爲這是開始編程問題的關鍵。

既然是作業,我會試着堅持提示。對正則表達式和Regex.Replace做一點研究。你可能會發現你在那裏尋找什麼。

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

4

喜歡的東西myString.Replace("u","~").Replace("o","u").Replace("i","o").Replace("e","i").Replace("a","e").Replace("~","a")

這是假設字符串不包含~開始。

對不起,在一個作業問題上發佈代碼,但有人說它不能用String.Replace完成,我想明確說明它可以。 。 。關鍵只是確保沒有兩個元音同時取代了同樣的事情。也就是說,在o變爲u的時候,u必定已經是別的了。同樣,u's不能成爲a,直到a被替換爲其他東西。引入一個額外字符(在我的情況下爲~)似乎是解決這個問題的最簡單方法。

+0

我正要發佈這個完全相同的代碼片段! + 1 – MatthewKing 2010-05-27 07:34:02

1
string str = "instructor"; 

請注意str.Replace不會更改字符串。相反,它會返回一個新字符串,並替換字符。

實際上,寫下面的行不執行任何操作,因爲替換的結果不會保存任何地方:

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

爲了保持新的結果,你需要一個指向它的變量:

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

或者,你可以重複使用相同的變量:

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

現在,這可以在單節鋰完成NE,但我不會提交家庭作業......更明確的解決方案,使用一個臨時角色,可能是:

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運算符,所以這使我保持在數組中,處於正確的位置。

+0

+ 1爲「(i + 1)%週期。長度是循環陣列的常用技巧」 – riffnl 2010-05-27 15:15:55