【问题标题】:c++ employee name search [closed]c ++员工姓名搜索[关闭]
【发布时间】:2018-09-01 08:16:28
【问题描述】:
        string name[size] = {"Collins, Bill", "Smith, Bart", "Michalski, Joe", "Griffin, Jim",
                "Sanchez, Manny", "Rubin, Sarah", "Taylor, Tyrone", "Johnson, Jill",
                "Allison, Jeff", "Moreno, Juan", "Wolfe, Bill", "Whitman, Jean",
                "Moretti, Bella", "Wu, Hong", "Patel, Renee", "Harrison, Rose",
                "Smith, Cathy", "Conroy, Pat", "Kelly, Sean", "Holland, Beth"};



    int binarySearchIterative(string name[], int size, string empName) {
        int low = 0;
        int high = size - 1;

        while (low <= high) {
            int mid = (low + high) / 2;
            if (empName == name[mid]) {
                return mid;
            } else if (empName < name[mid]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        return -1;
    }

因此,当我输入要搜索的名称时,我必须完全按照数组中列出的方式输入它。例如,如果我想找到比尔柯林斯。我必须输入柯林斯,比尔。如果我输入 Bill Collins,它会告诉我找不到该员工。我需要能够在不使用逗号的情况下搜索名字 First Last。如果您需要查看我的更多代码,请告诉我。

【问题讨论】:

  • 你自己尝试过什么吗?
  • 您需要将这些名称分开,因为实际上没有人会以这种方式输入它们。
  • 你的问题是什么?

标签: c++ c++11 search binary-search


【解决方案1】:

二分搜索需要排序输入,您可以通过铅笔测试轻松检查:

假设你有一系列像1,5,8,10,12这样的数字,你正在寻找5;首先猜测,您拆分系列并测试中间的数字,即8。由于5 低于8,显然您不必在8 上方的一半中寻找5。然而,这个假设只有在序列被排序的情况下才成立。否则5 也可能在上半部分。

所以对你的输入进行排序,然后看看它是否有效。否则使用调试器:-)

【讨论】:

    【解决方案2】:

    您需要实现一个比较函数(或代码),从字符串中提取名字和姓氏(作为单独的变量)。

    提取后,您可以轻松地按名字或姓氏进行比较。

    理想情况下,您应该有一个对数据进行建模的结构,例如一个名字字段和一个姓氏字段。

    【讨论】:

      猜你喜欢
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多