好的,所以我有一个家庭作业,使用隐藏在函数中的两种不同的排序来对指针数组进行排序。我相信我知道如何实现冒泡排序,但我真的很难理解在不使用STL容器的情况下我必须做什么。这就是我已经拥有的:
#include <iostream>
#include <string>
#include <iomanip>
#include <conio.h>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
//Enumeration
enum columns{SSN=0, LASTNAME=1};
//Global Constants
const int MAXELEMENTS = 100;
void insertionSort (string* [2][MAXELEMENTS], int);
int main ()
{
int index = 0;
int elemCnt = 0;
string employee_array[2][MAXELEMENTS];
string * p2employee_array [2] [MAXELEMENTS] = {{NULL}};
fstream inFile;
inFile.open("Lab4.csv", ios::in);
if (inFile.fail())
{
cout<<"File Failed To Open"<<endl;
}
while(!inFile.eof())
{
//Load the values array
getline(inFile,employee_array[LASTNAME][index],',');
getline(inFile,employee_array[SSN][index],'\n');
//Load the pointers array
p2employee_array[LASTNAME][index] = &employee_array[LASTNAME][index];
p2employee_array[SSN][index] = &employee_array[SSN][index];
elemCnt++;
index++;
}
inFile.close();
if (inFile.fail())
{
cout<<"File Failed To Close"<<endl;
}
//Construct a separator line
string line;
line = line.assign(64,'-');
//Display the original data
cout << "ORIGINAL DATA..." << endl << endl;
cout << setw(40) << "Employee Data" << endl
<< setw(40) << "Adrian Rodriguez" << endl << endl << endl;
cout << left << setw(40) << " " << setw(12) << "Address of" << "Address of"
<< endl
<< setw(20) << "SSN"
<< setw(20) << "Last Name" << setw(12) << "SSN" << "Last Name"
<< endl;
cout << line << endl << endl;
elemCnt = elemCnt;
for(index = 0; index<elemCnt; index++)
{
cout << setw(20) << employee_array[SSN][index]
<< setw(21) << employee_array[LASTNAME][index]
<< setw(12) << p2employee_array[SSN][index]
<< setw(12) << p2employee_array[LASTNAME][index]
<< endl;
}
cout<<endl<<endl;
cout<<"About to sort arrays of pointers in ASCENDING ORDER on LAST NAME..."<<endl;
insertionSort (p2employee_array, elemCnt);
getch ();
return 0;
}
//************************************************
void insertionSort (string* p2employee_array, int elemCnt)
{
int j;
char* cmp; // cmp is a pointer to a C string
for( int i = 1; i < size; ++i )
{
cmp = (char*)p2employee_array[i].c_str();//pointer in cmp
j = i - 1;
while(j>=0 && strcmp(cmp,p2employee_array[j].c_str())<0)
{
p2employee_array[j + 1] = p2employee_array[j];
--j;
}
p2employee_array[j + 1] = string(cmp); // insert
}
我的代码不会构建文件,这让我发疯。有人可以告诉我,我做错了什么?错误消息只是说: 未定义的引用`insertionSort(std :: string *(*)[100],int)
答案 0 :(得分:2)
前言是:
void insertionSort (string* [2][MAXELEMENTS], int);
但定义如下:
void insertionSort (string* p2employee_array, int elemCnt)
{
...
}
功能签名需要匹配。 即
void insertionSort (string* p2employee_array[2][MAXELEMENTS], int elemCnt)
{
...
}