Я пишу программу, которая получит текстовый файл, прочитает список имен из этого файла, отсортирует эти имена в алфавитном порядке, а затем напечатает отсортированный список обратно.
Первоначально это был проект для моего класса "Введение в программирование", который должен был использовать массивы, но я пытаюсь переоборудовать его для работы с векторами, что позволяет мне использовать файл любой длины вместо жесткого массива длина.
Но Intellisense выдает мне ошибку:
Нет подходящей функции преобразования из "std :: vector >" в "std :: vector > * "существует
Каждый раз, когда я пытаюсь передать имя файла функции (например, в displayArray(names, nameQty)
, я получаю ошибку с names
). Мне трудно гуглить, как передать вектор в функцию, поэтому я думаю, что в этом моя проблема. Полный код вставлен ниже:
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
int readFromFile(string[], string);
void displayArray(vector<string>[], int);
void alphaSort(vector<string>[], int);
void swap(string&, string&);
int main() {
//Declare variables
string fileName;
vector<string>names(1);
int nameQty;
//Prompt for file name
cout << "Please enter the name of the file to read names from: " << endl;
cin >> fileName;
//Call function to open file and read names into a vector array. Function will return the number of names in file
nameQty = readFromFile(names, fileName);
//Display unsorted names
cout << "Unsorted names:" << endl;
displayArray(names, nameQty);
//Sort names into alphabetical order
alphaSort(names, nameQty);
//Display sorted names
cout << "Sorted names:" << endl;
displayArray(names, nameQty);
//More to come after this; program isn't done yet!
}
/*
* Function to read a list from a text file into an array.
* The array starts at size 1, then increments by 1 for each subsequent iteration
* The array then deletes the final element when there is nothing more to read
* (since the last element will be uninitialized)
*/
int readFromFile(vector<string> array, string fileName) {
ifstream inputFile;
inputFile.open(fileName);
if (!inputFile) {
cout << "Invalid file name. Please restart program and try again."
<< endl;
system("pause");
exit(EXIT_FAILURE);
}
else {
int index = 0;
while (inputFile) {
cin >> array[index];
array.push_back;
index++;
}
array.pop_back;
inputFile.close();
return (index + 1);
}
}
//Function to display list of items in array
void displayArray(vector<string> array[], int quantity) {
for (int i = 0; i < quantity; i++)
cout << array[i] << endl;
}
//Selection sort function puts array elements in alphabetical order
void alphaSort(vector<string> names[], int qty) {
for (int j = 0; j < qty - 1; j++) {
for (int i = j + 1; i < qty; i++) {
if (names[j] > names[i]) {
swap(names[j], names[i]);
}
}
}
}
//Function to swap elements a and b in array
void swap(string &a, string &b) {
string temp = a;
a = b;
b = temp;
}
Пожалуйста, не беспокойтесь о моем использовании system("pause")
и using namespace std
. Я знаю, что это плохая практика, но это то, что нас просили делать в классе.