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
Next > < Previous
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.
More Homework Help Questions Additional questions in this topic.
Need Online Homework Help?
Ask a Question
Get FREE Expert Answers
WITHIN MINUTES
Related Questions