C# C中字符串中的反向元音
我试图将一个字符串作为输入,并返回只有元音颠倒的字符串。它是无错误的,但不是无错误的。它在Test19和Test20上失败。没有办法解决这个问题或者为什么我在这个测试中遇到了问题。所有其他测试通过。第一个代码块是我的代码,后面是我在第二个代码块中创建的测试 这是指向页面的链接,该页面详细介绍了我所做测试的更多信息。C# C中字符串中的反向元音,c#,list,linq,nunit,stringbuilder,C#,List,Linq,Nunit,Stringbuilder,我试图将一个字符串作为输入,并返回只有元音颠倒的字符串。它是无错误的,但不是无错误的。它在Test19和Test20上失败。没有办法解决这个问题或者为什么我在这个测试中遇到了问题。所有其他测试通过。第一个代码块是我的代码,后面是我在第二个代码块中创建的测试 这是指向页面的链接,该页面详细介绍了我所做测试的更多信息。 这是因为在测试用例19中 list = { 'a', 'e', 'a', 'a' } 当您尝试删除列表时,最后一个元素是“a”,第一个元素将被删除 sb.Append(list.
这是因为在测试用例19中
list = { 'a', 'e', 'a', 'a' }
当您尝试删除列表时,最后一个元素是“a”,第一个元素将被删除
sb.Append(list.Last()); // appends the last element in the list, which is OK,
list.Remove(list.Last()); // since list.Last() is 'a', removes the first 'a' element in the list.
解决方案非常简单:
sb.Append(list.Last());
list.RemoveAt(list.Count - 1); // Remove the last item in the list.
希望这有帮助。发生这种情况是因为在测试用例19中
list = { 'a', 'e', 'a', 'a' }
当您尝试删除列表时,最后一个元素是“a”,第一个元素将被删除
sb.Append(list.Last()); // appends the last element in the list, which is OK,
list.Remove(list.Last()); // since list.Last() is 'a', removes the first 'a' element in the list.
解决方案非常简单:
sb.Append(list.Last());
list.RemoveAt(list.Count - 1); // Remove the last item in the list.
希望这有帮助。我会做一些更改。首先,我将把元音列表的创建移到一次性分配的类成员中,以避免不必要的分配。出于效率原因,我还将其设置为哈希集:
private static readonly HashSet<char> _vowels = new HashSet<char>(new[] { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' });
对于完成所有工作的方法,我会给变量提供更有意义的名称。元音代替list,c代替v,因为我们知道它是char,但不一定是元音,我想这就是v的意思
我还将元音列表放在一个堆栈中,以便您可以根据需要轻松地弹出它们
public static string reverseVowelsOfString(string s)
{
Stack<char> vowels = new Stack<char>(s.Where(IsVowel));
StringBuilder sb = new StringBuilder();
foreach (char c in s)
{
if (IsVowel(c))
{
sb.Append(vowels.Pop());
}
else
{
sb.Append(c);
}
}
return sb.ToString();
}
我会做一些改变。首先,我将把元音列表的创建移到一次性分配的类成员中,以避免不必要的分配。出于效率原因,我还将其设置为哈希集:
private static readonly HashSet<char> _vowels = new HashSet<char>(new[] { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' });
对于完成所有工作的方法,我会给变量提供更有意义的名称。元音代替list,c代替v,因为我们知道它是char,但不一定是元音,我想这就是v的意思
我还将元音列表放在一个堆栈中,以便您可以根据需要轻松地弹出它们
public static string reverseVowelsOfString(string s)
{
Stack<char> vowels = new Stack<char>(s.Where(IsVowel));
StringBuilder sb = new StringBuilder();
foreach (char c in s)
{
if (IsVowel(c))
{
sb.Append(vowels.Pop());
}
else
{
sb.Append(c);
}
}
return sb.ToString();
}
在这种情况下使用它很方便。Push在末尾添加一个元素,Pop删除最后一个元素并返回其值。在这种情况下使用它很方便。Push会在末尾添加一个元素,Pop会删除最后一个元素并返回其值。感谢您的建议。在这里学到了一些很棒的东西!请注意,您只需返回s.aggregateNewStringBuilder,sb,c=>sb.appendis元音?元音。Pop:c.ToString;。因为这个代码允许。谢谢你的建议。在这里学到了一些很棒的东西!请注意,您只需返回s.aggregateNewStringBuilder,sb,c=>sb.appendis元音?元音。Pop:c.ToString;。因为这个代码允许它。