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