Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# - Fatal编程技术网

C# 删除字符数组中的元素集

C# 删除字符数组中的元素集,c#,C#,我有一个char数组,如果我找到某个char,我必须从该数组中删除元素。例如:“段落”在字符数组中赋值。我已将搜索关键字指定为“g”。如果找到了,那么我必须通过删除所有元素(包括找到的元素)将原始字符数组重新修改为“raphs” char[]ch=“段落” 搜索chr='g' 预期结果(如果找到chr): char[]ch=“raphs” 解释清楚一点 我得写封信。查找str(用户输入)是否包含单词“abcdef”的所有字符,其顺序与“abcdef”中指定的顺序相同。如果包含相同序列中的所有字符

我有一个char数组,如果我找到某个char,我必须从该数组中删除元素。例如:“段落”在字符数组中赋值。我已将搜索关键字指定为“g”。如果找到了,那么我必须通过删除所有元素(包括找到的元素)将原始字符数组重新修改为“raphs”

char[]ch=“段落”

搜索chr='g'

预期结果(如果找到chr):

char[]ch=“raphs”

解释清楚一点 我得写封信。查找str(用户输入)是否包含单词“abcdef”的所有字符,其顺序与“abcdef”中指定的顺序相同。如果包含相同序列中的所有字符,则返回True,否则返回false

用户输入:fgajbdcmdgeoplfqz 输出:真

用户输入:asrbcyufde 输出:false

尝试

        char[] ch = "paragraphs".ToCharArray();
        int index = Array.IndexOf(ch, 'g');
        char[] result = new string(ch).Substring(index+1).ToCharArray();
您可以使用LINQ,它将跳过元素,直到找到
search
字符

由于要使用数组,因此需要额外的
Skip
来获取
raphs
而不是
graphs
,以及输入字符串和结果的
ToArray()

char[] ch = "paragraphs".ToArray();
char search = 'g';
ch = ch.SkipWhile(c => c != search).Skip(1).ToArray(); // raphs

但老实说,由于您的输入是一个
字符串
,我会使用它:

string ch = "paragraphs";
char search = 'g';
ch = ch.Substring(ch.IndexOf(search) + 1);
如果真的有必要,以后用
.ToArray()
将其转换


现在回答你的“澄清”(顺便说一句,这几乎是另一个问题)

也许有更好的方法可以做到这一点,但这里有一些方法可以在O(n)中实现您想要的


以下是我不使用Linq的版本:

    static void Main(string[] args)
{

    Console.WriteLine("Please provide a list of characters");
    string Charactersinput  = Console.ReadLine();
    Console.WriteLine("Please provide the search character");
    char Searchinput = Console.ReadKey().KeyChar;
    Console.WriteLine("");

    List<char> ListOfCharacters = new List<char>();
    //fill the list of characters with the characters from the string
    // Or empty it, if th esearch charcter is found

    for (int i = 0; i < Charactersinput .Length;  i++)
    {
        if (Searchinput == Charactersinput[i])
        {
            ListOfCharacters.Clear();
        }
        else
        ListOfCharacters.Add(Charactersinput [i]);

    }

    //get your string back together
    string Result = String.Concat(ListOfCharacters);


    Console.WriteLine("Here's a list of all characters after processing: {0}", Result);
    Console.ReadLine();



}
static void Main(字符串[]args)
{
Console.WriteLine(“请提供字符列表”);
string Charactersinput=Console.ReadLine();
Console.WriteLine(“请提供搜索字符”);
char Searchinput=Console.ReadKey().KeyChar;
控制台。写线(“”);
List ListOfCharacters=新列表();
//用字符串中的字符填充字符列表
//或者,如果找到搜索字符,则将其清空
for(int i=0;i
回答与原始问题截然不同的“澄清”问题:

我得写封信。查找str(用户输入)是否包含所有 单词“abcdef”的字符顺序与 “abcdef”。如果包含相同序列中的所有字符或 else
false

ContainsInSequence("fgajbdcmdgeoplfqz", "abcdef"); // true
ContainsInSequence("asrbcyufde ", "abcdef"); // false
ContainsInSequence("abcdfe", "abcdef"); // false
输入:fgajbdcmdgeoplfqz输出:真
输入:asrbcyufde输出:false

下面的函数接受两个字符串,一个是要搜索的源字符串,另一个是包含要匹配的字符序列的字符串。然后它搜索源字符串,查找每个字符(从找到的前一个字符的位置开始)。如果未找到任何字符,则返回false。否则返回true:

public static bool ContainsAllCharactersInSameSequence(string sourceString, 
    string characterSequence)
{
    // Short-circuit argument check
    if (sourceString == null) return characterSequence == null;
    if (characterSequence == null) return false;
    if (characterSequence.Length > sourceString.Length) return false;
    if (sourceString == characterSequence) return true;

    int startIndex = 0;

    foreach (char character in characterSequence)
    {
        int charIndex = sourceString.IndexOf(character, startIndex);
        if (charIndex == -1) return false;
        startIndex = charIndex + 1;
    }

    return true;
}

为什么使用字符数组?将其保留为字符串并使用为这些情况设计的方法会简单得多。如果找到多个字符,您希望返回值是什么?如果在上面的示例中,搜索chr为“a”?那么您的“澄清”给出的输入/输出与原始问题完全不同。鉴于您现在陈述的是一个完全不同的问题:您尝试了什么。张贴您的代码并解释您被卡住的地方。
字符数组
(他的输入)不是
列表
。此外,他的输入不是
字符串。你没有回答这个问题。好的,我会修改它。那会有用的。对于最后一行,如果(index>=0&&ch.Length-(index+1)>0{var result=newchar[ch.Length-(index+1)];Array.Copy(ch,index+1,0,result.Length);返回结果;}否则返回新字符[0]因为不需要分配多个字符串。是的,终于有了一些东西可以完成所要求的任务(在您的
ToArray()
编辑之后),尽管这不是可能的最有效的解决方案。看在上帝的份上,@Alex,为什么不自己发布可能的最有效的解决方案呢@鲁弗斯一世没有打算发布答案,直到OP扩大了他的问题,以表明他确实试图解决这个问题,但与此同时,大量的答案被发布,实际上没有回答这个问题,我觉得不得不发表评论。@Alex,啊,我明白了,只是好奇,因为你在评论中一直很直言不讳!但是我同意,这个问题是不完整的,并且没有显示任何真正的代码。@Alex你怎么看?如果输入“段落”并且搜索字符为“g”,现在将打印“raphs”作为输出。因此,这是对您之前发布的答案的改进(即,它做了正确的事情)。尽管如此,它仍然没有完全按照问题中的要求进行操作,因为它没有使用
char
数组进行输入和输出。因此他需要使用相同的数组进行输入和输出?问题中说明了什么?输入:
char[]ch=“段落”
字符搜索_char='g'预期输出:
char[]结果的值为
{'r','a','p','h','s'}
。因此,您的示例应该匹配这些输入和输出。尝试使用此签名编写一个方法
公共静态char[]filtercharray(char[]input,char search\u char)
,然后编写一些代码来执行该操作并返回预期的输出。那么你就已经回答了这个问题。
public static bool ContainsAllCharactersInSameSequence(string sourceString, 
    string characterSequence)
{
    // Short-circuit argument check
    if (sourceString == null) return characterSequence == null;
    if (characterSequence == null) return false;
    if (characterSequence.Length > sourceString.Length) return false;
    if (sourceString == characterSequence) return true;

    int startIndex = 0;

    foreach (char character in characterSequence)
    {
        int charIndex = sourceString.IndexOf(character, startIndex);
        if (charIndex == -1) return false;
        startIndex = charIndex + 1;
    }

    return true;
}