El programa se supone que la búsqueda de un nombre en una matriz de cadena. Originalmente, el programa fue adaptado para el tipo de datos int, pero cambió a la cadena. He intentado modificar el código para que se ejecute y lo hace, pero yo no obtener los resultados correctos. Hay algo mal con mi búsqueda binaria función. Mi búsqueda binaria función no ha sido editado correctamente para adaptarse al cambio en el tipo de datos de int a string. No funcionará ya que tengo las cadenas en la matriz en lugar de int que fue creado originalmente para. Todo lo demás parece funcionar correctamente.

Este es el resultado obtengo.

Por favor, introduzca el nombre de un empleado: Looney

Que el nombre que existen en la matriz.

Técnicamente, se supone que debo llegar el mensaje de que existe y en qué posición lo hace.

//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;
}
¿Cuál es el problema exactamente («Hay algo mal con mi binarios función de búsqueda» es muy amplio).
Por qué no utilizar std::sort y std::binary_search?

OriginalEl autor Duck | 2015-04-15

1 Comentario

  1. 1

    Porque el nombre de Looney no existe en la matriz.

    Debe ingresar Looney, Joe para obtener el resultado esperado.

    De entrada es malo, de lo contrario su aplicación parecen buenas.

    OriginalEl autor Mohit Jain

Dejar respuesta

Please enter your comment!
Please enter your name here