Нашел меня немного застрял в текущем проекте. Я пытаюсь прочитать файл .txt (первое и последнее имя, разделенное пробелом по 1 строке) в массив. После чтения в файле это то, что должно произойти.Массивы, сортировка и двоичный поиск
- сортировать массив с помощью функции (я выбрал выбор рода)
- попросить пользователя ввести имя
- использовать функцию, чтобы сделать бинарный поиск
- дисплей ли имя друга или нет если он найден
Для большей части я понимаю. Программа читала в файле раньше, и я даже написал ее, чтобы отображать, чтобы увидеть, даже если она не нужна. Теперь он отображает только одно имя. Ища небольшая помощь, чтобы заставить меня двигаться снова. Извиняюсь, если я болею в прикладе, или если мой код взлетел. Спасибо за любую помощь.
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
//Function prototypes
void nameSort(string[], const int);
//prototype to display the contents of the file after sorting
//Although I do not need this I wanted to see the names were
//read in correctly.
void nameDisplay(string[], const int);
void nameSearch(string[], const int);
int index = 0; //loop counter
int main()
{
const int ARRAY_SIZE = 100;
string nameArray[ARRAY_SIZE];
//file object
ifstream fileIn;
fileIn.open("myFriends.dat");
while (index < ARRAY_SIZE && getline(fileIn, nameArray[index]))
index++;
//function call to sort the array
nameSort(nameArray, index);
//Display names to screen as a test of the sort
nameDisplay(nameArray, ARRAY_SIZE);
//function call for search
nameSearch(nameArray, ARRAY_SIZE);
system("pause");
return 0;
}
//function definitions
void nameSort(string *array, const int ARRAY_SIZE)
{
bool swap;
string temp;
do
{
swap = false;
for (int count = 1; count < (ARRAY_SIZE - 1); count++)
{
if(array[count-1] >array[count])
{
temp = array[count-1];
array[count-1] = array[count];
array[count] = temp;
swap = true;
}
}
}
while(swap);
}
void nameSearch(string *array, const int ARRAY_SIZE)
{
int first = 0;
int last = ARRAY_SIZE - 1;
int middle;
string name;
bool friends = false;
do
{
cout<<"Please enter a name or END to terminate:";
cin>>name;
}
while(!friends && first <= last && name != "END");
{
middle = (first + last)/2;
if (array[middle] == name)
{
friends = true;
cout<<array[middle]<<" is my friend."<<endl;
}
else if (array[middle] > name)
last = middle - 1;
else
last = middle + 1;
}
}
void nameDisplay(string *array, const int ARRAY_SIZE)
{
for(int index = 0; index < ARRAY_SIZE; index++)
cout<<array[index]<<endl;
}
Это выглядит не так: 'строка NameArray [ARRAY_SIZE] [ARRAY_SIZE];' Вы хотите использовать два измерения для того, чтобы сохранить первое и фамилиями ? Я думаю, что это было бы лучше: 'string nameArray [ARRAY_SIZE] [2];' – NicholasM
В идеале да, я хотел, чтобы один одномерный массив удерживал первые и последние имена, такие как Tom Jones, затем следующую строку и другое имя. Программа должна содержать до 200 имен, поэтому я бы написал массив следующим образом: string nameArray [ARRAY_SIZE] [200]? – allendks45
Традиционная интерпретация двумерного массива для любого типа (давайте использовать 'string' в этом примере): ' string nameArray [NUMBER_ROWS] [NUMBER_COLUMNS] '. Я предлагаю вам объявить 'nameArray [ARRAY_SIZE] [2]'. Тогда для человека 'i',' nameArray [i] [0] 'будет фамилия человека, а' имяArray [i] [1] 'будет именем человека. – NicholasM