加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 命令一个字符数组,使所有元音都出现在最后

发布时间:2020-12-16 00:06:32 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个程序,其中一个单词作为字符串被提供作为输入,我必须重新排列单词,以便它只是通过移动改变单词中字母的顺序 所有的元音到最后,保持它们与原始单词中出现的顺序相同 namespace ConsoleApplication1{ class Program { static void Main(strin
我正在尝试编写一个程序,其中一个单词作为字符串被提供作为输入,我必须重新排列单词,以便它只是通过移动改变单词中字母的顺序
所有的元音到最后,保持它们与原始单词中出现的顺序相同

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string word = "application";
            char[] letters = word.ToCharArray();
            char x = new char { };
            for (int j = 0; j < letters.Length; j++)
            {
                if ((letters[j] == 'a') | (letters[j] == 'e' ) | (letters[j] == 'i' ) | (letters[j] == 'o' ) | (letters[j] 

== 'u'))
                {
                    for (int i = 0; i < letters.Length - 1; i++)
                    {
                        x = letters[i];
                        letters[i] = letters[i + 1];
                        letters[i + 1] = x;
                    }
                }
            }
            string s = new string(letters);
            Console.WriteLine(s);
        }
    }
}

该计划的输出是

ationaplic

但是程序的预期输出是

pplctnaiaio

为什么我的代码没有产生我想要的输出?

编辑的工作代码是

namespace VowelSort
{
    class Program
    {
        static void Main(string[] args)
        {
            string word = "application";
            char[] letters = word.ToCharArray();
            char x = new char { };
            int count = 0;
            for (int j = 0; j < letters.Length - count; j++)
            {
                if ((letters[j] == 'a') | (letters[j] == 'e') | (letters[j] == 'i') | (letters[j] == 'o') | (letters[j] == 'u') | (letters[j] == 'A') | (letters[j] == 'E') | (letters[j] == 'I') | (letters[j] == 'O') | (letters[j] == 'U'))
                {
                    for (int i = j; i < letters.Length - 1; i++)
                    {
                        x = letters[i];
                        letters[i] = letters[i + 1];
                        letters[i + 1] = x;

                    }
                    count++;
                    j--;
                }

            }
            string s = new string(letters);
            Console.WriteLine(s);
            Console.WriteLine(count);
        }
    }
}

解决方法

我在这里发现了三个问题:

>当您找到元音时,您将内部循环设置为0,因此您始终将第一个字符移动到结尾.从j开始吧.
>移动元音后,在下一个字母处开始外循环 – 所以如果连续有两个元音,则跳过第二个元音(因为它已移到“当前”位置后面). ‘移动元音,减少j.
>你将你的外环直接运行到最后,但是当你到达已经移动过的元音时你应该停止它.保持你移动的元音数量的计数,并在你从最后得到那么多的字符时停止你的外循环.

尝试自己实现这些更改,但如果你遇到困难,我可以给你一些指示.

一旦你有了这个工作,你可能想要通过意识到你不必执行多个成对交换来加速你的内循环 – 你可以只注意你找到的元音,在一个字符之后移动所有内容,然后插入最后的元音.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读