C++ Array Help: Solve Troubleshooting Issues

  • Comp Sci
  • Thread starter goku3240
  • Start date
  • Tags
    C++
In summary: The conversation is discussing different functions and arrays being used in the code. The code mainly involves reading in a form letter and using substitution strings to replace tags in the letter. The user also enters a filename for the fields and the output file. The finished letter is then written to the output file and the counts of substitutions for each tag are output to the screen in alphabetical order.
  • #1
goku3240
4
0
I am having trouble trying to get my code to run for the following:
// Use substitution strings to replace all the occurrences
// of multiple tags in the lines of text in a form.
// The user enters the filename.
// The tags and their substitution strings are found in another file.
// The user enters the filename.
// Output the result to the file letter.txt.
// The counts of substitutions for each tag will be output to the screen
// sorted alphabetically by tag names.

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

using namespace std; //introduces namespace std

// Maximum nunber of tagged fields
const int MAXFIELDS = 20;

// Structure to hold the tag and substitution string.
// It is also able to maintain a count of the occurrences of that tag.
struct Field
{
string tag;
string sub;
int count;
};

// Function declarations
// Add additional declarations as needed
int readFields(Field fields[]);
void trim(string& s);
string fillForm(const string& form, Field fields[], int nFields);
string replaceTag(const string& form, Field& field);

int main( void )
{
// Declare string for the form letter

// Call Function 1 to read in the form letter to the string


// Declare an array of Fields named fields
Field fieldsArray[MAXFIELDS];

// Declare variable for the field count
// Call Function 2 to read the fields and return the count.


// Declare string for the finished letter.
// Call Function 5 that substitutes all the sub strings for the tags.
// It returns the finished letter.


// Open the file for the finished letter and test the file stream


// Write the finished letter to the file


// Close the file stream


// Call Function 7 to output the field statistics

return 0;
}

// Function #1
// This is a function to read a form into a string reference parameter.
// Write it. Use string concatenation to merge the lines that you read into
// a single string. Don't forget to insert newline characters.
// This is nearly the same as the corresponding function in Assignment 6.
// However, you will now prompt the user to enter the name of the file to open.


// Function #2
// This function populates the Fields in an array and returns the count.
// It is nearly the same as readTagSub() from Assignment 6.
// Prompt the user for a filename to open.
// It calls the function to convert the tags to lowercase,
// and calls the trim function to remove leading whitespace from the
// substitution string.
// Observe the use of the subscript and dot operators to access data
// members of structs in an array.
int readFields(Field fields[])
{
// Declare and initialize count of the fields read
int n=0;

// Prompt and read filename.
// Open the input file and test it.


// Loop as long as we have not reached the EOF or exceeded the array limit

{
// Input the tag

// Break if there was no tag

// Call Function 3 to make the tag lowercase

// Read the rest of the line into the substitution string

// Call the Function 4 to strip off the leading whitespace characters

// Set the occurrence count to 0

// Increment the field count

}

// Close the stream

// Return the field count
return n;
}

// Function #3
// This function converts the const string reference parameter to
// all lowercase and returns it.
// This is exactly the same as the corresponding function in Assignment 6.


// Function #4
// This function trims off leading whitespace from the string reference parameter.
// This is exactly the same as the corresponding function in Assignment 6.
// Find the position of the first non-whitespace character and use the substr function.
void trim(string& s)
{
// Loop over each leading character until you find one that is not a whitespace.

// Use substr to assign a new value to s.

}

// Function #5
// This function takes an entire form and returns the string
// that has all tags replaced with their substitution string.
string fillForm(const string& form, Field fields[], int nFields)
{
// Declare a string variable initialized with the form parameter


// Loop over all the fields

{
// Call Function 6 using the local variable and a single Field.
// Use the result to update the local string variable.

}

// Return the filled form (not "")
return "";
}

// Function #6
// This function replaces all the occurrences of a single tag
// with its substitution string. Tags are case-insensitive.
// This is nearly the same as the corresponding function in Assignment 6.
// However, it now counts the number of replacements of the tag.
// Use the dot operator to access the data members of the Field.
// It returns the new string with this tag's replacements.
string replaceTag(const string& form, Field& field)
{
// Declare a string for the new string
string newStr;
// Make a lowercase version of the form to search for the tag

// Declare instances of size_t for the tag length,
// start position for the searching, and position of the next tag.
// Initialize them appropriately.


// Loop as long as you haven't reached the end of the form

{
// Find the position of the next tag in the lowercase version of the form.
// Use the version of the find function that takes the start position of
// the search as the second argument.

// If a tag was found (use string::npos)

{
// Concatenate onto the revision the substring from the original form
// beginning at the start position up to the position of the next tag.

// Concatenate onto the revision the substitution string.

// Increment the occurrence count for the tag.

// Update the start position to just past the end of the tag.

}
// Otherwise (tag was not found)

{
// Concatenate onto the revision the substring from the original form
// beginning at the start position up to the end of the form.

// Update the start position to the length of the form.

}
}

// Return the revision string
return newStr;
}

// Function #7
// This function outputs the field statistics to cout.
// Call Function 8 to sort the fields so that the output
// appears alphabetically by tag name.
// Write the function definition.


// Function #8
// Use either bubble sort or selection sort to sort the
// array of Field structs alphabetically by tag.
// There is a similar example of using bubble sort to sort
// an array of Student structs in the lecture notes.



// Function #9
// Swap function for Fields



I tried many combination of functions and arrays but they won't work. What code goes ater the //
 
Physics news on Phys.org
  • #2
goku3240 said:
I tried many combination of functions and arrays but they won't work. What code goes ater the //
Well, that's really the question, and is something you need to try. So far, you really don't have much beyond a skeleton of a program. When you get something that will compile, and have some specific questions, let us know.
 

Related to C++ Array Help: Solve Troubleshooting Issues

1. How do I declare and initialize an array in C++?

To declare and initialize an array in C++, you can use the following syntax:

data_type array_name[array_size] = {value1, value2, ..., valueN};

For example, to declare and initialize an array of integers with size 5, you can use:
int myArray[5] = {1, 2, 3, 4, 5};

2. How can I access elements in a C++ array?

You can access elements in a C++ array using their index, which starts from 0. For example, to access the first element in the array declared above, you can use:
int firstElement = myArray[0];
To access the third element, you can use:
int thirdElement = myArray[2];

3. How do I solve "out of bounds" errors when working with C++ arrays?

"Out of bounds" errors occur when you try to access an element in an array that is outside its declared size. To solve this, make sure you are accessing elements within the array's bounds, and that the array size is large enough to hold all the elements you want to access.

4. How can I resize an array in C++?

In C++, arrays are fixed-size and cannot be resized. However, you can create a new array with a different size and copy the elements from the old array into the new one. There are also data structures, such as vectors, that allow for dynamic resizing in C++.

5. How do I pass an array as a parameter to a function in C++?

To pass an array as a parameter to a function in C++, you can use the array's name without brackets in the function's parameter list. For example:

void printArray(int myArray[], int size) {
// function code
}
To call this function, you can use:
printArray(myArray, 5);
Note that the size of the array is also passed as a parameter to the function.

Similar threads

  • Engineering and Comp Sci Homework Help
Replies
5
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
3
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
7
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
24
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
11
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
3
Views
4K
  • Programming and Computer Science
Replies
5
Views
1K
  • Engineering and Comp Sci Homework Help
Replies
5
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
6K
  • Engineering and Comp Sci Homework Help
Replies
9
Views
3K
Back
Top