C# 如何解决这个逻辑

C# 如何解决这个逻辑,c#,C#,编写一个函数,该函数接受字符串输入并删除所有大于或等于给定数字的字符 RemoveCharacters(“西班牙语”,2)应返回“panih” RemoveCharacters(“西班牙语”,3)应返回“西班牙语” string text=“西班牙语”; var sb=新的StringBuilder(text.Length); int maxCount=2; int currentCount=2; char specialChar='S'; foreach(文本中的字符c) 如果(c!=spec

编写一个函数,该函数接受字符串输入并删除所有大于或等于给定数字的字符

RemoveCharacters(“西班牙语”,2)
应返回“panih”

RemoveCharacters(“西班牙语”,3)
应返回“西班牙语”

string text=“西班牙语”;
var sb=新的StringBuilder(text.Length);
int maxCount=2;
int currentCount=2;
char specialChar='S';
foreach(文本中的字符c)

如果(c!=specialChar | |++currentCount c!='S'| |++commasFound,让我们分两步处理字符串:

  • 找出要删除的字符(出现次数大于或等于计数次数)
  • 从字符串中删除此类字符
  • 实施

    private static String RemoveCharacters(string value, int count) {
      if (string.IsNullOrEmpty(value))
        return value;
      else if (count <= 1)
        return "";
    
      HashSet<char> toRemove = new HashSet<char>(value
        .GroupBy(c => char.ToUpper(c))
        .Where(chunk => chunk.Count() >= count)
        .Select(chunk => chunk.Key));
    
      return string.Concat(value.Where(c => !toRemove.Contains(char.ToUpper(c))));
    }
    
    结果:

    Spanish         => 'panih' // S is removed
    bla-bla-bla     => ''      // all characters are removed
    Abracadabra     => 'cd'    // A, b, r are removed
    

    <>我不是为你写作业,而是考虑使用字典。重复你的单词中的字符。如果它存在于你的字典中,增加那个元素。否则把它插入到你的字典中,值为1。然后重复你的字典键并指出哪些超出了你的目标。最后,写出你的字符串,排除那些C。角色。

    您的问题到底是什么?此代码是否如您所期望的那样工作?如果是,它会返回什么,而您期望的是什么?“平移”它的显示方式是这样的…我想登录上述问题
    string[] tests = new string[] {
      "Spanish",
      "bla-bla-bla",
      "Abracadabra",
    };
    
    string report = string.Join(Environment.NewLine, tests
      .Select(test => $"{test,-15} => '{RemoveCharacters(test, 2)}'"));
    
    Console.Write(report);
    
    Spanish         => 'panih' // S is removed
    bla-bla-bla     => ''      // all characters are removed
    Abracadabra     => 'cd'    // A, b, r are removed