【问题标题】:String splitting while checking for containing words检查包含单词时的字符串拆分
【发布时间】:2016-08-25 19:03:15
【问题描述】:

这个应用程序相当简单,我没有收到任何错误或警告。 它只返回单词“Hello”,而不会移动到单词“Bill”。它通过输入 Hello 和 Bill 来工作。

研究: http://www.dotnetperls.com/split

https://msdn.microsoft.com/en-us/library/dy85x1sa(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.string.split(v=vs.110).aspx

任何提示或修复都会很棒!

       static void Main(string[] args)
    {
        //Varaibles and Condition Types
        string WordiIntitalString = Console.ReadLine();
        //outputs "hello bill"
        char[] delimiterChars = { ' ' };
        string[] WordArray = WordiIntitalString.Split(delimiterChars);
        foreach(var word in WordArray)
        {
            //Console.WriteLine(word);
            if (word.Equals("hello"))
            {
                Console.WriteLine(word);
                Thread.Sleep(1000);
                if (word.Contains("bill"))
                {
                    Console.WriteLine("jarvis");
                    Thread.Sleep(1000);
                }
            }
            Thread.Sleep(1000);
        }

包含正在尝试在代码顶部查找分支。因此,如果您执行 hello bill,则它会找到分支。这个方法在我看来非常有效,但是如果您对更好的方法有任何建议,请发表评论!

【问题讨论】:

  • 因为你的第一个if
  • 我也不理解所有的反对意见。这位先生有一个他无法回答的问题。他很清楚他想要回答什么,并提供了代码。不要仅仅因为您认为这个问题太简单而投反对票。
  • @bravosierra99 查看向下箭头的鼠标悬停文本:“这个问题没有显示任何研究工作;不清楚或没有用。”考虑到问题是多么基本(并且相对明显),投票者显然认为这并没有反映出太多的努力。
  • @EdCottrell 我认为很容易忘记代码的早期难度。由于他没有收到错误,因此如果您缺少关键概念,可能很难进行研究。显然他不理解嵌套条件。不知道为什么这意味着他应该得到一堆反对票。我想这只是我的看法,但考虑到这应该是一个你可以去提问的地方,似乎不是很吸引人。
  • @bravosierra99 我同意很容易忘记学习编码有多难。也就是说,很明显word equals "hello"word contains "bill" 不可能都为真。该站点欢迎新程序员提出问题,但它是supposed to be "a question and answer site for professional and enthusiast programmers"。它不是学习编码最基本方面的地方,比如if 语句后面的大括号是干什么用的。你和我都确实试图回答 OP 的问题,但这并不能使它成为一个经过充分研究的问题。

标签: c++ arrays if-statement split


【解决方案1】:

您嵌套了具有矛盾条件的 if 语句。如果同一个词也满足word.Equals("hello"),就不可能满足word.Contains("bill")

换句话说,如果word 进入第一个if,它不可能也进入第二个。这意味着您的命令 Console.WriteLine("jarvis") 永远不会到达。

而不是嵌套 ifs,您可能打算在替代方案中执行它们:

if (word.Equals("hello"))
{
    Console.WriteLine(word);
    Thread.Sleep(1000);
} else if (word.Contains("bill")) // <-- key change is here
{
    Console.WriteLine("jarvis");
    Thread.Sleep(1000);
}
Thread.Sleep(1000);

【讨论】:

  • 我实际上是想这样做,我正在尝试为数百万个 if 语句创建一个二叉树。你建议我这样做的任何方式
  • @JoeMeyer 如果你真的需要检查数百万个条件,那意味着你很可能在基本层面上做错了什么。也就是说,如果您在文本中检查数百万个不同的条件,那么您的整个应用程序策略可能是错误的。在任何情况下,您都需要某种配置或数据文件和一个循环。您显然不想对所有这些条件进行硬编码。但是如何做到这一点对于这里的问题来说太广泛了。如果这个答案有帮助,请记住接受它。如果您需要其他帮助,可以提出新问题。
【解决方案2】:

你已经嵌套了 if's my friend

    foreach(var word in WordArray)  <-- 1st time word is hello, second time it's bill
    {
        //Console.WriteLine(word);
        if (word.Equals("hello"))  <-  let's hello through, doesn't let bill through
        {
            Console.WriteLine(word);
            Thread.Sleep(1000);
            if (word.Contains("bill"))  <--- bill never makes it here
            {
                Console.WriteLine("jarvis");
                Thread.Sleep(1000);
            }
        }
        Thread.Sleep(1000);
    }

【讨论】:

    【解决方案3】:

    永远不会运行内部 if 条件。在第一个循环中,您会得到单词“hello”,并且执行外部 if 条件中的代码。在第二个循环中,我们有 'bill' 并且外部 if 条件忽略了它,因此内部 if 条件永远不会运行。试试这个:(放置在 for each 循环内)

    if (word.Equals("hello"))
    {
        Console.WriteLine(word);
        Thread.Sleep(1000);
    } 
    else if (word.Contains("bill"))
    {
        Console.WriteLine("jarvis");
        Thread.Sleep(1000);
    }
    else
    {
        Thread.Sleep(1000);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2014-01-25
      • 1970-01-01
      • 2016-06-12
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多