所有的元音到最后,保持它们与原始单词中出现的顺序相同
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.
>你将你的外环直接运行到最后,但是当你到达已经移动过的元音时你应该停止它.保持你移动的元音数量的计数,并在你从最后得到那么多的字符时停止你的外循环.
尝试自己实现这些更改,但如果你遇到困难,我可以给你一些指示.
一旦你有了这个工作,你可能想要通过意识到你不必执行多个成对交换来加速你的内循环 – 你可以只注意你找到的元音,在一个字符之后移动所有内容,然后插入最后的元音.
总结以上是内存溢出为你收集整理的c# – 命令一个字符数组,使所有元音都出现在最后全部内容,希望文章能够帮你解决c# – 命令一个字符数组,使所有元音都出现在最后所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)