Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中字符串中的反向元音_C#_List_Linq_Nunit_Stringbuilder - Fatal编程技术网

C# C中字符串中的反向元音

C# C中字符串中的反向元音,c#,list,linq,nunit,stringbuilder,C#,List,Linq,Nunit,Stringbuilder,我试图将一个字符串作为输入,并返回只有元音颠倒的字符串。它是无错误的,但不是无错误的。它在Test19和Test20上失败。没有办法解决这个问题或者为什么我在这个测试中遇到了问题。所有其他测试通过。第一个代码块是我的代码,后面是我在第二个代码块中创建的测试 这是指向页面的链接,该页面详细介绍了我所做测试的更多信息。 这是因为在测试用例19中 list = { 'a', 'e', 'a', 'a' } 当您尝试删除列表时,最后一个元素是“a”,第一个元素将被删除 sb.Append(list.

我试图将一个字符串作为输入,并返回只有元音颠倒的字符串。它是无错误的,但不是无错误的。它在Test19和Test20上失败。没有办法解决这个问题或者为什么我在这个测试中遇到了问题。所有其他测试通过。第一个代码块是我的代码,后面是我在第二个代码块中创建的测试

这是指向页面的链接,该页面详细介绍了我所做测试的更多信息。


这是因为在测试用例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;。因为这个代码允许它。