【问题标题】:I'm trying to find a specific word within a char array我正在尝试在 char 数组中查找特定单词
【发布时间】:2014-11-08 07:30:18
【问题描述】:

使用 C# 我试图在 char 数组中查找特定单词。此外,我不希望多次使用同一个字母,即单词是“你好”,我试图在随机的字母数组中找到它,所以如果在随机数组中使用了字母“l”字母,我不希望它再次被使用。字母数组中应该有另一个“l”用作“hello”中的第二个“l”。只是试图准确。一个简单的答案将非常有帮助。谢谢。

到目前为止,这是我的尝试。

public static char [] Note = "hello".ToCharArray();
public static char [] Newspaper = "ahrenlxlpoz".ToCharArray();

static void main(string[] args)
{
    Array.Sort(Note);
    Array.Sort(Newspaper);

    if(Newspaper.Contains<Note>)
    {
        Console.Write("It should display the letters of Note found within Newspaper");
    }   
}

【问题讨论】:

    标签: c# arrays char


    【解决方案1】:

    试试这个:

    public static char[] Note = "hello".ToCharArray();
    public static char[] Newspaper = "ahrenlxlpoz".ToCharArray();
    
    foreach (char c in Note) //check each character of Note
    {
        if (Newspaper.Contains(c))
        {
            Console.Write(c); //it will display hello
        }
    }
    

    【讨论】:

    • @NepSyn14 请注意,这仍然会说“ahrenlxpoz”包含“hello”(即使没有足够的“l”)。
    • 谢谢艾伦。我没想到。
    • @NepSyn14 如果这有所不同,那么我有一个替代答案。您可能希望更新您的问题以表明这样的要求。
    • 请解释string strNote = new string(Note); //change Note to string这一行。您是否要进行克隆并对其进行迭代,因为您不直接通过foreachNote
    • @JeppeStigNielsen:谢谢你的提及。我没有意识到。答案已更新
    【解决方案2】:

    其实字符串就是一个char数组。最“经典”的方法是:

    string Note = "hello";
            char[] Newspaper = "ahrenlxlpoz".ToCharArray();
            string res = "";
    
            for (int i = 0; i < Note.Length; i++)
                for (int j = 0; j < Newspaper.Length; j++)
                    if (Note[i] == Newspaper[j])
                    {
                        res += Newspaper[j];
                        Newspaper[j] = ' ';
                        break;
                    }
            //This prints the remaining characters in Newspaper. I avoid repeating chars.
            for (int i = 0; i < Newspaper.Length; i++ )
                Console.Write(Newspaper[i]+"\n");
            Console.Write("\n\n");
    
            if (Note.Equals(res)) Console.Write("Word found");
            else Console.Write("Word NOT found");
            Console.Read();
    

    最后, res 将是“你好”。在控制台中打印 res。我添加了' ' 以避免重复字符,正如有人在回答中所说的那样。所以最后它会将结果与单词进行比较,并告诉你它是否在字符串中找到了单词。试着把报纸改成这样:"ahrenlxlpaz",它会告诉你这个词没有找到:)

    【讨论】:

    • 我添加了一些东西,如果你想检查它^_^欢迎你:3 @NepSyn14
    • 嗨 c_str。非常感谢!
    • 1) 字符串不是字符数组。它实现了IEnumerable&lt;char&gt;,并且它有一个可以访问字符的索引器,但这并不意味着它是一个数组 2) 代码既复杂又慢O(Note.Length * Newspaper.Length)
    【解决方案3】:

    我假设“包含”是指报纸的每个字母中有足够数量的字母来组成 Note。例如,您至少需要两个 l 来组成单词“hello”。如果是这样,你基本上需要统计两个字符串中每个字母的个数,并确保 Note 中每个字母的个数小于或等于 Newspaper 中该字母的个数。

    var dictNote = Note.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
    var dictNews = Newspaper.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
    
    bool contains = dictNote.All(x => 
        dictNews.ContainsKey(x.Key) && x.Value <= dictNews[x.Key]);
    

    【讨论】:

    • 谢谢艾伦。你是对的。我应该尽量使用尽可能多的相同字母来组成单词,在这种情况下是“你好”,而不是假设一个字母可以多次使用。
    • 艾伦,你能告诉我如何显示这个结果吗?
    • @NepSyn14 当然,但我不清楚你想要的结果与 Note 本身有什么不同。您想要“在报纸中找到的便笺字母”,但这不就是便笺中的所有字母吗? (Console.WriteLine(Note))。帮助我了解您需要的结果。
    • 嗨艾伦。我只是想写一段代码,让我检查我想使用的任何字母是否在一个随机字母的字符内。我只是在 Note 中使用“hello”作为起点。我只是希望能够将一个字符与另一个字符进行比较,看看它们有什么共同点并显示常见的字母。我希望这是有道理的。我是编程新手,我试图让我的问题清楚,但我仍然不熟悉一些编码语言,也许我的措辞不够清楚。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2021-06-22
    • 2013-08-19
    • 2021-01-25
    相关资源
    最近更新 更多