2010-05-27 185 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