gpt4 book ai didi

c# - 排序一个字符数组,使所有元音都出现在最后

转载 作者:行者123 更新时间:2023-11-30 13:27:07 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,其中提供一个作为字符串的单词作为输入,我必须重新排列单词,这样它就可以通过移动来改变单词中字母的顺序所有元音到最后,保持它们在原始单词中出现的顺序相同

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);
}
}
}

最佳答案

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

  1. 当您找到一个元音字母时,您会从 0 开始您的内部循环,因此您总是将第一个 字符移到末尾。改为从 j 开始。
  2. 移动一个元音后,从下一个字母开始外循环 - 所以如果连续有两个元音,则跳过第二个(因为它已移到“当前”位置后面)。移动完元音后,减少 j
  3. 您将外循环一直运行到最后,但是当您到达已经移动的元音时应该停止它。记下您移动了多少个元音字母,并在从末尾移动到那么多字符时停止外循环。

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

完成此操作后,您可能希望通过意识到不必执行多个成对交换来加快内部循环 - 您可以只记下找到的元音,将其后的所有内容向上移动一个字符,然后在末尾插入元音。

关于c# - 排序一个字符数组,使所有元音都出现在最后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14231077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com