Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

ASSIGNMENT: (Do in C++) Create a program, which will perform the following actio

ID: 669139 • Letter: A

Question

ASSIGNMENT: (Do in C++)
Create a program, which will perform the following actions:
1. Create a class to control manipulation (input and output) of a random access file containing of set of text strings of varying length with the following format:

a) At the beginning will be a 32-bit integer having the number of strings in the file.

b) At the end will be an array of pairs of integers (streamoff for the offset from the beginning of the file to the start of the corresponding string and 4 bytes for the length of the string in bytes).

c) The number at the beginning will be followed by a set of strings of text. There is no special termination character at the end of a string.

2. The class will support methods with the following capabilities:

a) Get will have one 32-bit integer parameter (the index of the string to retrieve) and one string parameter to be filled in with the string read.

b) Replace will have one 32-bit integer parameter (the index of where the string will be written) and one string parameter containing the string to write. If the index to write is larger than the current largest index, insert a series of zero value indices (to indicate empty strings) into the array.

c) Insert will have the same parameters as Replace but instead of writing over an index, it will move all indices from the insert point on down by one and write the new string into the new space. 3. Test your class by allowing the user to enter the following from the keyboard:

a) G followed by an integer to read and print the string at the requested index.

b) R followed by an integer and a string to write a string at the requested index.

c) I followed by an integer and a string to insert a string at the requested index.

Explanation / Answer

#include "iostream"

// Convert a string of Numbers to integer

long int atoifunc(const char* str);

// Function to convert a string of Numbers into an integer

long int atoioct(const char* str);

// Function to convert a string of Numbers into a hexadecimal integer

long long int atoiHex(const char* str);

// Find length of a string

static int strlength(const char *str);

// Get digit from character in input string

static int getDecDigit(const char str);

// Get a digit from corresponding character in input string

static int getOctDigit(const char str);

// Get a hexadecimal digit from corresponding character in input string

static int getHexDigit(const char str);

using namespace std;

// Application program

int main(void)

{

    char decstr[8] = "";

    char octstr[8] = "";

    char Hexstr[8] = "";

    long int IntNumber=0;

    long int OctNumber=0;

    long long int HexNumber=0;

    cout << "Enter a string of 8 characters in decimal digit form: ";

    cin >> decstr;

    cout << "Enter a string of 8 characters is octal form: ";

    cin >> octstr;

    IntNumber = atoifunc(decstr);

    cout <<" You entered decimal number: " << IntNumber;

    cout << oct;

    OctNumber= atoioct(octstr);

    // Displaying octal number should be done in digits 0-7

    cout <<" You entered octal number: " << OctNumber;

    cout << dec;

    // Displaying octal number should be done in digits 0-7

    cout <<" You entered an oct which is decimal number: " << OctNumber;

    cout << " Enter a string of 7 characters in Hex form: ";

    cin >> Hexstr;

    HexNumber=atoiHex(Hexstr);

    cout << hex;

    // Displaying octal number should be done in digits 0-9, A-F

    cout <<" You entered a Hexadecimal number: " << HexNumber;

    cout << dec;

    // Displaying octal number should be done in digits 0-9, A-F

    cout <<" You entered a Hexadecimal which is decimal number: " << HexNumber;

    return 0;

}

/* Function to convert a string of Numbers into an integer */

/* Get the Number of digits entered as a string.

For each digit, place it in appropriate place of an integer such as

digit x 1000 or digit x10000 depending on integer size and input range.

The multiple of the the first and subsequent digits would be selected depending

on the Number of digits.

For example, 123 would be calculated as an integer in the following steps:

1* 100

2* 10

3* 1

The calculated value is then returned by the function.

For example, if the digits entered are 12345

Then,the multipliers are:

str[0] * 10000

str[1] * 1000

str[2] * 100

str[3] * 10

str[4] * 1

Check your machine endianness for correct order of bytes.

*/

long int atoifunc(const char* str)

{

int declength =strlength(str);

long int Number =0;

   switch(declength)

    {

          case 0:

          Number += getDecDigit(str[0])*0;

          break;

          // Convert characters to digits with another function.

          case 1:

          Number += getDecDigit(str[0])*1;

          break;

          case 2:

          Number+=getDecDigit(str[0])*10;

          Number+=getDecDigit(str[1])*1;

          break;

          case 3:

          Number+=getDecDigit(str[0])*100;

          Number+=getDecDigit(str[1])*10;

          Number+=getDecDigit(str[2])*1;

          break;

          case 4:

          Number+=getDecDigit(str[0])*1000;

          Number+=getDecDigit(str[1])*100;

          Number+=getDecDigit(str[2])*10;

          Number+=getDecDigit(str[3])*1;

          break;

          case 5:

          Number+=getDecDigit(str[0])*10000;

          Number+=getDecDigit(str[1])*1000;

          Number+=getDecDigit(str[2])*100;

          Number+=getDecDigit(str[3])*10;

          Number+=getDecDigit(str[4])*1;

          break;

          case 6:

          Number+=getDecDigit(str[0])*100000;

          Number+=getDecDigit(str[1])*10000;

          Number+=getDecDigit(str[2])*1000;

          Number+=getDecDigit(str[3])*100;

          Number+=getDecDigit(str[4])*10;

          Number+=getDecDigit(str[5])*1;

          break;

          case 7:

          Number+=getDecDigit(str[0])*1000000;

          Number+=getDecDigit(str[1])*100000;

          Number+=getDecDigit(str[2])*10000;

          Number+=getDecDigit(str[3])*1000;

          Number+=getDecDigit(str[4])*100;

          Number+=getDecDigit(str[5])*10;

          Number+=getDecDigit(str[6])*1;

          break;

          case 8:

          Number+=getDecDigit(str[0])*10000000;

          Number+=getDecDigit(str[1])*1000000;

          Number+=getDecDigit(str[2])*100000;

          Number+=getDecDigit(str[3])*10000;

          Number+=getDecDigit(str[4])*1000;

          Number+=getDecDigit(str[5])*100;

          Number+=getDecDigit(str[6])*10;

          Number+=getDecDigit(str[7])*1;

          break;

          default:

          Number =0;

          break;

}

return Number;

}

// Find length of a string

static int strlength(const char *str)

{

    int count=0;

    while(str[count]!='')

    {

        count++;

    }

    return count;

}

// get a digit from corresponding character in input string

static int getDecDigit(const char str)

{

    int digit =0;

    switch (str)

    {

        case '0':

        digit = 0;

        break;

        case '1':

        digit = 1;

        break;

        case '2':

        digit = 2;

        break;

        case '3':

        digit = 3;

        break;

        case '4':

        digit = 4;

        break;

        case '5':

        digit = 5;

        break;

        case '6':

        digit = 6;

        break;

        case '7':

        digit = 7;

        break;

        case '8':

        digit = 8;

       break;

        case '9':

        digit = 9;

        break;

        default:

        digit =0;

        break;

    }

    return digit;

}

/* Function to convert a string of Numbers into an integer */

long int atoioct(const char* str)

{

long int Number =0;

int stroctlength =strlength(str);

   switch(stroctlength)

    {

          case 0:

          Number += getOctDigit(str[0])*0;

          break;

          // Convert characters to digits with another function.

          case 1:

          Number += getOctDigit(str[0])*1;

          break;

          case 2:

          Number+=getOctDigit(str[0])*8;

          Number+=getOctDigit(str[1])*1;

          break;

          case 3:

          Number+=getOctDigit(str[0])*64;

          Number+=getOctDigit(str[1])*8;

          Number+=getOctDigit(str[2])*1;

          break;

          case 4:

          Number+=getOctDigit(str[0])*512;

          Number+=getOctDigit(str[1])*64;

          Number+=getOctDigit(str[2])*8;

          Number+=getOctDigit(str[3])*1;

          break;

          case 5:

          Number+=getOctDigit(str[0])*4096;

          Number+=getOctDigit(str[1])*512;

          Number+=getOctDigit(str[2])*64;

          Number+=getOctDigit(str[3])*8;

          Number+=getOctDigit(str[4])*1;

          break;

          case 6:

          Number+=getOctDigit(str[0])*32768;

          Number+=getOctDigit(str[1])*4096;

          Number+=getOctDigit(str[2])*512;

          Number+=getOctDigit(str[3])*64;

          Number+=getOctDigit(str[4])*8;

          Number+=getOctDigit(str[5])*1;

          break;

          case 7:

          Number+=getOctDigit(str[0])*262144;

          Number+=getOctDigit(str[1])*32768;

          Number+=getOctDigit(str[2])*4096;

          Number+=getOctDigit(str[3])*512;

          Number+=getOctDigit(str[4])*64;

          Number+=getOctDigit(str[5])*8;

          Number+=getOctDigit(str[6])*1;

          break;

          default:

          Number =0;

          break;

}

return Number;

}

// Get a digit from character input in input string

static int getOctDigit(const char str)

{

    int digit =0;

    switch (str)

    {

        case '0':

        digit = 0;

        break;

        case '1':

        digit = 1;

        break;

        case '2':

        digit = 2;

        break;

        case '3':

        digit = 3;

        break;

        case '4':

        digit = 4;

        break;

        case '5':

        digit = 5;

        break;

        case '6':

        digit = 6;

       break;

        case '7':

        digit = 7;

        break;

        default:

        digit =0;

        break;

    }

    return digit;

}

// Get a hexadecimal digit from corresponding character in input string

static int getHexDigit(const char str)

{

    int digit =0;

    switch (str)

    {

        case '0':

        digit = 0;

        break;

        case '1':

        digit = 1;

        break;

        case '2':

        digit = 2;

        break;

        case '3':

        digit = 3;

        break;

        case '4':

        digit = 4;

        break;

        case '5':

        digit = 5;

        break;

        case '6':

        digit = 6;

        break;

        case '7':

        digit = 7;

        break;

        case '8':

        digit = 8;

       break;

        case '9':

        digit = 9;

        break;

        case 'A' :

        case 'a':

        digit =10;

        break;

        case 'B' :

        case 'b':

        digit = 11;

        break;

        case 'C' :

        case 'c':

        digit =12;

        break;

        case 'D' :

        case 'd':

        digit =13;

        break;

        case 'E' :

        case 'e':

        digit = 14;

        break;

        case 'F' :

        case 'f':

        digit = 15;

        break;

        default:

        digit =0;

        break;

    }

    return digit;

}

// Function to convert a string of Numbers into a hexadecimal integer

long long int atoiHex(const char* str)

{

long long int Number =0;

int strHexlength =strlength(str);

switch(strHexlength)

    {

          case 0:

          Number += getHexDigit(str[0])*0;

          break;

          // Convert characters to digits with another function.

          // Implicit type conversion from int to long int.

          case 1:

          Number += getHexDigit(str[0])*1;

          break;

          case 2:

          Number+=getHexDigit(str[0])*16;

          Number+=getHexDigit(str[1])*1;

          break;

          case 3:

          Number+=getHexDigit(str[0])*256;

          Number+=getHexDigit(str[1])*16;

          Number+=getHexDigit(str[2])*1;

          break;

          case 4:

          Number+=getHexDigit(str[0])*4096;

          Number+=getHexDigit(str[1])*256;

          Number+=getHexDigit(str[2])*16;

          Number+=getHexDigit(str[3])*1;

          break;

          case 5:

          Number+=getHexDigit(str[0])*65536;

          Number+=getHexDigit(str[1])*4096;

          Number+=getHexDigit(str[2])*256;

          Number+=getHexDigit(str[3])*16;

          Number+=getHexDigit(str[4])*1;

          break;

          case 6:

          Number+=getHexDigit(str[0])*1048576;

          Number+=getHexDigit(str[1])*65536;

          Number+=getHexDigit(str[2])*4096;

          Number+=getHexDigit(str[3])*256;

          Number+=getHexDigit(str[4])*16;

          Number+=getHexDigit(str[5])*1;

          break;

          case 7:

          Number+=getHexDigit(str[0])*16777216;

          Number+=getHexDigit(str[1])*1048576;

          Number+=getHexDigit(str[2])*65536;

          Number+=getHexDigit(str[3])*4096;

          Number+=getHexDigit(str[4])*256;

          Number+=getHexDigit(str[5])*16;

          Number+=getHexDigit(str[6])*1;

          break;

          default:

          Number =0;

          break;

}

return Number;

}