Binäre Suche Algorithmus mit string array

Das Programm soll die Suche nach einem Namen in einem string-array. Ursprünglich wurde das Programm angepasst, um den Datentyp "int", aber geändert, um string. Ich habe versucht, den code zu modifizieren, um es laufen und das tut er, aber ich komme nicht auf die richtige Ausgabe. Es ist etwas falsch mit meinem binäre Suche-Funktion. Meine binäre Suche-Funktion wurde nicht richtig angepasst, die änderung in den Datentyp von int zu string. Es wird nicht funktionieren, da ich die strings in dem array anstelle von int, die es ursprünglich erstellt wurde. Alles andere scheint einwandfrei zu arbeiten.

Dies ist die Ausgabe, die ich bekomme.

Bitte geben Sie eine Mitarbeiter-name: Looney

Namen hat, der existiert in dem array.

Technisch, soll ich die Nachricht bekommen, dass es vorhanden ist und welche position es hat.

//This program demonstrates the binarySearch function, which
//performs a binary search on an integer array.

#include "stdafx.h"
#include <iostream>
#include <string> 
using namespace std;

//Function prototype
void sortArray(string [], int); 
int binarySearch(string [], int, string);
const int SIZE = 20;

int main()
{
    //Defined array 
    const int NUM_NAMES = 20;
    string names[NUM_NAMES] = {"Collins, Bill", "Smith, Bart", "Allen, Jim",
                               "Griffin, Jim", "Stamey, Marty", "Rose, Geri",
                               "Taylor, Terri", "Johnson, Jill", "Allison, Jeff",
                               "Looney, Joe", "Wolfe, Bill", "James, Jean",
                               "Weaver, Jim", "Pore, Bob", "Rutherford, Greg",
                               "Javens, Renee", "Harrison, Rose", "Setzer, Cathy",
                               "Pike, Gordon", "Holland, Beth" };

    //Variables 
    string empName; 
    int results;  

    //Sort array first
    sortArray(names, NUM_NAMES); 

    //Prompt for user input to enter an employee name 
    cout << "Please enter an employee's name: "; 
    getline(cin, empName); 

    //Search for name
    results = binarySearch(names, NUM_NAMES, empName); 

    //If results contains -1 the name was not found.
    if (results == -1)
        cout << "That name does not exist in the array.\n";
    else
    {
        //Otherwise results contains the subscript of
        //the specified employee ID in the array.
        cout << "That name is found at element " << results;
        cout << " in the array.\n";
    }

    system("PAUSE"); 

    return 0;
}

//**************************************************************
//Definition of function sortArray.                           *
//This function performs an ascending order selection sort on *
//array. size is the number of elements in the array.         *
//**************************************************************
void sortArray(string names[], int size)
{
    int startScan, minIndex; 
    string minValue;

    for (startScan = 0; startScan < (size - 1); startScan++)
    {
        minIndex = startScan;
        minValue = names[startScan];
        for(int index = startScan + 1; index < size; index++)
        {
            if (names[index] < minValue)
            {
                minValue = names[index];
                minIndex = index;
            }
        }
        names[minIndex] = names[startScan];
        names[startScan] = minValue;
    }
}

//***************************************************************
//The binarySearch function performs a binary search on an     *
//integer array. array, which has a maximum of size elements,  *
//is searched for the number stored in value. If the number is *
//found, its array subscript is returned. Otherwise, -1 is     *
//returned indicating the value was not in the array.          *
//***************************************************************
int binarySearch(string names[], int size, string value)
{
    int first = 0,             //First array element
        last = size - 1,       //Last array element
        middle,                //Mid point of search
        position = -1;         //Position of search value
    bool found = false;        //Flag

    while (!found && first <= last)
    {
        middle = (first + last) / 2;     //Calculate mid point
        if (names[middle] == value)      //If value is found at mid
        {
            found = true;
            position = middle;
        }
        else if (names[middle] > value)  //If value is in lower half
            last = middle - 1;
        else
            first = middle + 1;           //If value is in upper half
    }
    return position;
}
Was ist genau das problem ("Es ist etwas falsch mit meinem binäre Suche-Funktion" ist sehr breit).
Warum nutzen Sie nicht std::sort und std::binary_search?

InformationsquelleAutor Duck | 2015-04-15

Schreibe einen Kommentar