Homework Help Question & Answers

C++ how can I fix these errors this is my code main.cpp #include "SpecialArray.h" #include <...

C++

how can I fix these errors

0/10 5: Testing sort() function ^ Input inputi.txt int 1 2 34 8765 9 10 11 12 16 15 14 13 17 18 19 20 Your output Sorted outp

: Running default main.cpp to ensure input1.txt is properly read into/printed from SpecialArray class 0/10 Input inputl.txt i

this is my code

main.cpp

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


int measureElementsPerLine(ifstream& inFile) {
   // Add your code here.
   string line;

   getline(inFile, line);

   int sp = 0;

   for (int i = 0; i < line.size(); i++)

   {

       if (line[i] == ' ')

           sp++;

   }

   sp++;

   return sp;
}

int measureLines(ifstream& inFile) {
   // Add your code here.
   string line;

   int n = 0;

   while (!inFile.eof())

   {

       getline(inFile, line);

       n++;

   }

   return n;
}

int main()
{
   int numOfLines, numOfElements;
   string fileName, dataType;
   cin >> fileName >> dataType;
   ifstream inFile(fileName);

   // Add try statement below
   try

   {

       if (inFile.fail())

           throw "File does not exist.";

       numOfElements = measureElementsPerLine(inFile);
       inFile.close();
       inFile.open(fileName);
       numOfLines = measureLines(inFile);
       if (numOfLines == 0)
           throw "File is empty";
       inFile.close();

       if (dataType == "int") {
           SpecialArray<int> specialArray(numOfLines, numOfElements);
           inFile.open(fileName);
           specialArray.readFile(inFile);
           inFile.close();
           specialArray.print();
           specialArray.sort();
           cout << "\nSorted outputs: \n";
           specialArray.print();
       }
       else if (dataType == "string") {
           SpecialArray<string> specialArray(numOfLines, numOfElements);
           inFile.open(fileName);
           specialArray.readFile(inFile);
           inFile.close();
           specialArray.print();
           specialArray.sort();
           cout << "\nSorted outputs: \n";
           specialArray.print();
       }
   }
   // Add catch statement below
   catch (const char *msg)

   {

       cout << msg << endl;

       return -1;

   }

   return 0;
}

SpecialArray.h

#ifndef SpecialArray_H

#define SpecialArray_H

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

// Add your function declarations and definitions here. With template classes, it is recommended to put them in the same file.

template <class T>

class SpecialArray

{

private:

   T **arr;

   int rows;

   int cols;

public:

   SpecialArray()

   {

       rows = 0;

       cols = 0;

       arr = NULL;

   }

   SpecialArray(int r, int c)

   {

       rows = r;

       cols = c;

       arr = new T*[r];

       for (int i = 0; i < r; i++)

           arr[i] = new T[c];

   }

   ~SpecialArray()

   {

       for (int i = 0; i < rows; i++)

           delete[] arr[i];

       delete arr;

       rows = 0;

       cols = 0;

   }

   void readFile(ifstream &in)

   {

       for (int i = 0; i < rows; i++)

       {

           for (int j = 0; j < cols; j++)

           {

               in >> arr[i][j];

           }

       }

   }

   T max()

   {

       T temp = arr[0][0];

       for (int i = 0; i < rows; i++)

       {

           for (int j = 0; j < cols; j++)

           {

               if (arr[i][j] > temp)

                   temp = arr[i][j];

           }

       }

       return temp;

   }

   T min()

   {

       T temp = arr[0][0];

       for (int i = 0; i < rows; i++)

       {

           for (int j = 0; j < cols; j++)

           {

               if (arr[i][j] < temp)

                   temp = arr[i][j];

           }

       }

       return temp;

   }

   void sort()

   {

       for (int i = 0; i < rows; i++)

       {

           for (int j = 0; j < cols; j++)

           {

               for (int k = j + 1; k < cols; k++)

               {

                   if (arr[i][j] > arr[i][k])

                   {

                       T temp = arr[i][j];

                       arr[i][j] = arr[i][k];

                       arr[i][k] = temp;

                   }

               }

           }

       }

   }

   void print()

   {

       for (int i = 0; i < rows; i++)

       {

           for (int j = 0; j < cols; j++)

           {

               cout << arr[i][j];

               if (j != cols - 1)

                   cout << " ";

           }

           cout << endl;

       }

   }

   void saveToFile()

   {

       ofstream out;

       out.open("output.txt");

       for (int i = 0; i < rows; i++)

       {

           for (int j = 0; j < cols; j++)

           {

               out << arr[i];

               if (j != cols - 1)

                   out << " ";

           }

           out << endl;

       }

       out.close();

   }

};

#endif

0/10 5: Testing sort() function ^ Input inputi.txt int 1 2 34 8765 9 10 11 12 16 15 14 13 17 18 19 20 Your output Sorted outputs 1 23 4 5 678 9 10 11 12 13 14 15 16 17 18 19 20 Sorted outputs 1 2 34 Your output does not5678 contain 9 10 11 12 13 14 15 16 17 18 19 20
: Running default main.cpp to ensure input1.txt is properly read into/printed from SpecialArray class 0/10 Input inputl.txt int 1 234 8765 9 10 11 12 16 15 14 13 17 18 19 20 Your output Sorted outputs: 1 234 5 678 9 10 11 12 13 14 15 16 17 18 19 20 1 23 4 8765 Your output does not 9 10 11 12 LO LI contain 16 15 14 13 17 18 19 20
0 0
ReportAnswer #1

Solution:

Note : The error is due to the no.of lines read in the input file. In the above code it reads an extra one empty line. Following contains the modified code.

Code:

main.cpp:

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


int measureElementsPerLine(ifstream& inFile) {
   // Add your code here.
   string line;
   getline(inFile, line);
   int sp = 0;
   for (int i = 0; i < line.size(); i++)
   {
       if (line[i] == ' ')
           sp++;
   }
   sp++;
   return sp;
}

int measureLines(ifstream& inFile) {
// Add your code here.
   string line;
   int n = 0;
   while (!inFile.eof())
   {
       getline(inFile, line);
       n++;
   }
   return (n-1);       //Modification 7
}

int main()
{
   int numOfLines, numOfElements;
   string fileName, dataType;
   cout<<"\nEnter filename : ";   //Modification 1
   cin >> fileName;
   cout<<"\nEnter datatype : ";   //Modification 2
   cin >> dataType;
   ifstream inFile(fileName.c_str());   //Modification 3

   // Add try statement below
   try
   {
       if (inFile.fail())
           throw "File does not exist.";
       numOfElements = measureElementsPerLine(inFile);
       inFile.close();
       inFile.open(fileName.c_str());   //Modification 4
       numOfLines = measureLines(inFile);
       if (numOfLines == 0)
           throw "File is empty";
       inFile.close();

       if (dataType == "int") {
           SpecialArray<int> specialArray(numOfLines, numOfElements);
           inFile.open(fileName.c_str()); //Modification 5
           specialArray.readFile(inFile);
           inFile.close();
           specialArray.print();
           specialArray.sort();
           cout << "\nSorted outputs: \n";
           specialArray.print();
       }
       else if (dataType == "string") {
           SpecialArray<string> specialArray(numOfLines, numOfElements);
           inFile.open(fileName.c_str()); //Modification 6
           specialArray.readFile(inFile);
           inFile.close();
           specialArray.print();
           specialArray.sort();
           cout << "\nSorted outputs: \n";
           specialArray.print();
       }
   }
   // Add catch statement below
   catch (const char *msg)
   {
       cout << msg << endl;
       return -1;
   }
   return 0;
}

---------------------------------------

SpecialArray.h:

#ifndef SpecialArray_H
#define SpecialArray_H
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// Add your function declarations and definitions here. With template classes, it is recommended to put them in the same file.
template <class T>
class SpecialArray
{
   private:
       T **arr;
       int rows;
       int cols;
   public:
       SpecialArray()
       {
           rows = 0;
           cols = 0;
           arr = NULL;
       }
       SpecialArray(int r, int c)
       {
           rows = r;
           cols = c;
           arr = new T*[r];
           for (int i = 0; i < r; i++)
               arr[i] = new T[c];
       }
       ~SpecialArray()
       {
           for (int i = 0; i < rows; i++)
               delete[] arr[i];
           delete arr;
           rows = 0;
           cols = 0;
       }
       void readFile(ifstream &in)
       {
           for (int i = 0; i < rows; i++)
           {
               for (int j = 0; j < cols; j++)
               {
                   in >> arr[i][j];
               }
           }
       }
       T max()
       {
           T temp = arr[0][0];
           for (int i = 0; i < rows; i++)
           {
               for (int j = 0; j < cols; j++)
               {
                   if (arr[i][j] > temp)
                       temp = arr[i][j];
               }
           }
           return temp;
       }
       T min()
       {
           T temp = arr[0][0];
           for (int i = 0; i < rows; i++)
           {
               for (int j = 0; j < cols; j++)
               {
                   if (arr[i][j] < temp)
                       temp = arr[i][j];
               }
           }
           return temp;
       }
       void sort()
       {
           for (int i = 0; i < rows; i++)
           {
               for (int j = 0; j < cols; j++)
               {
                   for (int k = j + 1; k < cols; k++)
                   {
                       if (arr[i][j] > arr[i][k])
                       {
                           T temp = arr[i][j];
                           arr[i][j] = arr[i][k];
                           arr[i][k] = temp;
                       }
                   }
               }
           }
       }
       void print()

   {
           for (int i = 0; i < rows; i++)
           {
               for (int j = 0; j < cols; j++)
               {
                   cout << arr[i][j];
                   if (j != cols - 1)
                       cout << " ";
               }
               cout << endl;
           }
       }
       void saveToFile()
       {
           ofstream out;
           out.open("output.txt");
           for (int i = 0; i < rows; i++)
           {
               for (int j = 0; j < cols; j++)
               {
                   out << arr[i];
                   if (j != cols - 1)
                       out << " ";
               }
               out << endl;
           }
           out.close();
       }
};
#endif

----------------------------------------------------------------

Output:

Enter filename: input1.txt Enter datatype : int 1 2 3 8765 9 10 11 12 16 15 14 13 17 18 19 20 Sorted outputs: 1 2 3 56 7 9 10

------------------------------------------------------------------------------------------

Please comment if you have any queries on this solution..

Kindly up-vote if you are satisfied with this solution.

Add Homework Help Answer
Add Answer of:
C++ how can I fix these errors this is my code main.cpp #include "SpecialArray.h" #include <...
Your Answer: Your Name: What's your source?
Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Need Online Homework Help?
Ask a Question
Get FREE EXPERT Answers
WITHIN MINUTES