如何使用String.Replace
方法编写一个程序来旋转单词中的元音?意思是字母'a'将是'e','e'将是'i','i'将是'o','o'将是'u',最后'u'将是'a'。
例如,“讲师”一词将是“onstractur”。
答案 0 :(得分:6)
按顺序执行以下替换:
Y-> @ U-> Y 邻 - >û 异>○ E- I标记 A-> e @ - >一种
当然,@可以是任何保证不会出现在字符串中其他地方的字符。
答案 1 :(得分:4)
像myString.Replace("u","~").Replace("o","u").Replace("i","o").Replace("e","i").Replace("a","e").Replace("~","a")
这假设字符串不包含~
开头。
很抱歉在家庭作业问题上发布代码,但有些人说String.Replace
无法完成,我想明确表示可以。 。 。关键是确保没有两个元音同时替换为相同的东西。也就是说,当o
成为u
时,u
必须已经是其他内容。同样,u
不能成为a
,直到a
替换为其他内容。在我的案例中引入一个额外的字符(~
)似乎是处理此问题的最简单方法。
答案 2 :(得分:2)
我假设这是作业,所以我会给你一个解释性答案,而不是给你一个正确的代码解决方案:
我建议您先创建所有元音的列表或数组。然后查看原始字符串并检查元音列表中是否存在每个字符。如果是,那么你用元音列表中的下一个项目替换它(确保你在最后包裹)
答案 3 :(得分:1)
只需编写一个循环,一个开关盒就可以轻松解决您的问题。这是家庭作业吗?你尝试了什么
答案 4 :(得分:1)
对每个元音进行替换吗? string.replace。 (向后做以防止错误更换)
如果没有魔法角色,倒退仍然是个问题。见norheim.se回答
y-> @ u-> y o-> u i-> o e-> i a-> e @ - > a
答案 5 :(得分: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;
}
}
}
答案 6 :(得分:1)
不幸的是,你不会在string.Replace上走得太远......你最终会发现所有的元音都是一样的(正如你所发现的那样)。您需要一次性完成所有替换。你的教授给了你一个相当具有挑战性的问题,考虑到所有事情......特别是考虑到“无循环”的要求。
如果对一个或多个字符使用占位符字符,则可以使用String.Replace。它会使事情变得有点复杂和愚蠢,但我认为这是许多开始编程问题的重点。
既然是作业,我会尽力坚持。对正则表达式和Regex.Replace做一点研究。你可能会在那里找到你想要的东西。
编辑:刚看到你只能使用String.Replace。对于那个很抱歉。您必须使用占位符字符。
答案 7 :(得分:1)
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
运算符,因此这使我保持在数组中,位于正确的位置。
答案 8 :(得分:0)
您想要的方法是String.Replace
。
答案 9 :(得分:0)
听起来有点像家庭作业。
如果您发布的代码显示您要执行的操作以及遇到问题的位置,则您更有可能得到答案,因为至少它表明您已尝试找到解决方案。