删除char数组中的元素集

时间:2015-03-31 01:55:08

标签: c#

我有一个char数组,如果找到某个char,我必须从中删除元素。例如:“段落”在char数组中分配。我将搜索关键字指定为'g'。如果找到它,那么我必须通过删除包括找到的所有元素来将原始字符数组重新编码为“raphs”。

char [] ch =“paragraph”

搜索chr ='g'

期望的结果(如果找到chr):

char [] ch =“raphs”

解释清楚

我必须写一个函数。查找str(用户输入)是否包含与“abcdef”中指定的序列相同的单词“abcdef”的所有字符。如果包含相同序列中的所有char,则返回True,否则返回false。

用户输入:fgajbdcmdgeoplfqz 输出:true

用户输入:asrbcyufde 输出:false

4 个答案:

答案 0 :(得分:2)

您可以使用LINQ' SkipWhile,它将跳过元素,直到找到search字符。

获取Skip而不是raphs需要额外graphs,输入字符串和结果需要ToArray(),因为您希望使用数组。

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

但老实说,既然您的输入是string,我就可以使用它:

string ch = "paragraphs";
char search = 'g';
ch = ch.Substring(ch.IndexOf(search) + 1);

并且,如果确实有必要,之后将其转换为.ToArray()


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

可能有更好的方法可以做到这一点,但这里有一些可以在O(n)中实现你想要的东西

private bool ContainsInSequence(string input, string substring)
{
    int substringIndex = 0;
    for (int i = 0; i < input.Count(); i++)
    {
        if (input[i] == substring[substringIndex])
        {
            substringIndex++;
            if (substringIndex == substring.Length)
            {
                return true;
            }
        }
    }

    return false;
}

基本上,您按顺序浏览输入字符串,每次遇到子字符串中的当前字母时,都会转到下一个字母。

当您到达子字符串的末尾时,您知道输入字符串包含所有子字符串,因此您返回true

如果我们在完成所有输入后没有结束,这意味着有一封信无序或丢失,所以我们返回false

ContainsInSequence("fgajbdcmdgeoplfqz", "abcdef"); // true
ContainsInSequence("asrbcyufde ", "abcdef"); // false
ContainsInSequence("abcdfe", "abcdef"); // false

答案 1 :(得分:0)

尝试

        char[] ch = "paragraphs".ToCharArray();
        int index = Array.IndexOf(ch, 'g');
        char[] result = new string(ch).Substring(index+1).ToCharArray();

答案 2 :(得分:0)

这是我没有使用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();



}

答案 3 :(得分:0)

回答你的澄清&#34;问题,这与原始问题非常不同:

  

我必须写一个函数。找出str(用户输入)是否包含all   这个词的字符&#34; abcdef&#34;按照与中指定的顺序相同的顺序排列   &#34; ABCDEF&#34 ;.如果包含相同序列中的所有字符,则返回true   否则false

     

输入:fgajbdcmdgeoplfqz输出:true
  输入: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;
}