我正在尝试编写一个程序,其中一个单词作为字符串被提供作为输入,我必须重新排列单词,以便它只是通过将所有元音移动到结尾来改变单词中字母的顺序,保持它们的顺序与它们在原始单词中出现的顺序相同
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该计划的输出是
ationaplic
Run Code Online (Sandbox Code Playgroud)
但是程序的预期输出是
pplctnaiaio
Run Code Online (Sandbox Code Playgroud)
为什么我的代码没有产生我想要的输出?
编辑的工作代码是
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里发现了三个问题:
0
所以你总是将第一个字符移动到结尾.j
改为启动它.j
.尝试自己实现这些更改,但如果你遇到困难,我可以给你一些指示.
一旦你有了这个工作,你可能想要通过意识到你不必执行多个成对交换来加速你的内循环 - 你可以只注意你找到的元音,在一个字符之后移动所有内容,然后插入最后的元音.
归档时间: |
|
查看次数: |
2561 次 |
最近记录: |