替换C#中的多个字符

时间:2010-05-27 06:11:10

标签: c#

如何使用String.Replace方法编写一个程序来旋转单词中的元音?意思是字母'a'将是'e','e'将是'i','i'将是'o','o'将是'u',最后'u'将是'a'。

例如,“讲师”一词将是“onstractur”。

10 个答案:

答案 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)

听起来有点像家庭作业。

如果您发布的代码显示您要执行的操作以及遇到问题的位置,则您更有可能得到答案,因为至少它表明您已尝试找到解决方案。