# Programming Fundamentals/Practice: Strings and Files
## Chapter Summary

* Strings - An array of single digits or letters that is typically used to display to the user or is the user's input.
* Arrays - Sequenced collections of elements of the same data type with a single identifier name.
* String Functions - String functions are used in computer programming languages to manipulate a string or query information about a string.
* String Formatting - String formatting uses a process of string interpolation (variable substitution) to evaluate a string literal containing one or more placeholders, yielding a result in which the placeholders are replaced with their corresponding values.
* File Input and Output -A computer file is a computer resource for recording data discretely in a computer storage device. By using computer programs, a person can open, read, change, and close a computer file. Computer files may be reopened, modified, and copied an arbitrary number of times.
* Loading an Array from a Text File - Loading an array from a text file requires several steps, including: opening the file, reading the records, parsing (splitting) the records into fields, adding the fields to an array, and closing the file.
* Error Handling - Anticipating conditions that may cause errors when a program runs.
* Dynamic/Static Memory - Memory associated with local and global scope respectively.

## Review Questions
### True / False

* The character data type in C++ uses the double quote marks, like: char grade = “A”;
* Sizeof is an operator that tells you how many bytes a data type occupies in storage.
* Typedef helps people who can’t hear and is one of the standard accommodation features of a programming language for people with a learning disability.
* The sequence operator should be used when defining variables in order to save space.
* A filespec refers to a very small (like a spec dust) file.
* A device token is a special non zero value the operating system gives your program and is associated with the file that you requested to be opened.
* String length and storage are handled by the compiler or interpreter, not the user or programmer.
* A string can be both a literal constant and a variable.
* An array with string values can be edited in all the same ways as a single string.
* A program can only read a file line by line and process one record at a time.
Answers:
* false
* true
* false - Typedef is used to assign alternative names to any existing datatypes, which is mostly used with user-defined datatypes.
* false
* false
* true
* true
* true - A literal constant is a value, which can be a string.
* true
* false

### Short Answer

* Describe the normal operations allowed with the string data type.
* Describe why unary positive is worthless.
* Describe how unary negative works.
* Describe (in your chosen language) how you would:
** Change text to all uppercase
** Get rid of the letter "b" from the given string.
** string = "Hey buddy!"
* Describe the different ways you can read the contents of a file.
* Describe how string manipulation differs from variable manipulation

## Activities

Complete the following activities using pseudocode, a flowcharting tool, or your selected programming language. Use separate functions for input, each type of processing, and output. Avoid global variables by passing parameters and returning results. Create test data to validate the accuracy of each program. Add comments at the top of the program and include references to any resources used.

### String Activities

* Create a program that asks the user for a line of text containing a first name and last name, such as Firstname Lastname. Use string functions/methods to parse the line and print out the name in the form last name, first initial, such as Lastname, F. Include a trailing period after the first initial. Handle invalid input errors, such as extra spaces or missing name parts.
* Create a program that asks the user for a line of text. Use string functions/methods to delete leading, trailing, and duplicate spaces, and then print the line of text backwards. For example: the cat in the hat tah eht ni tac eht
* Create a program that asks the user for a line of comma-separated-values. It could be a sequence of test scores, names, or any other values. Use string functions/methods to parse the line and print out each item on a separate line. Remove commas and any leading or trailing spaces from each item when printed.
* Create a program that asks the user for a line of text. Then ask the user for the number of characters to print in each line, the number of lines to be printed, and a scroll direction, right or left. Using the given line of text, duplicate the text as needed to fill the given number of characters per line. Then print the requested number of lines, shifting the entire line’s content by one character, left or right, each time the line is printed. The first or last character will be shifted / appended to the other end of the string. For example: Repeat this. Repeat this. epeat this. Repeat this. R peat this. Repeat this. Re

### File Activities

Note: Each of the following activities uses code only to read the file. It is not necessary to use code to create the file.
* Using a text editor or IDE, copy the following list of names and grade scores and save it as a text file named scores.txt: Name,Score Joe Besser,70 Curly Joe DeRita,0 Larry Fine,80 Curly Howard,65 Moe Howard,100 Shemp Howard,85 Create a program that displays high, low, and average scores based on input from scores.txt. Verify that the file exists and then use string functions/methods to parse the file content and add each score to an array. Display the array contents and then calculate and display the high, low, and average score. Format the average to two decimal places. Note that the program must work for any given number of scores in the file. Do not assume there will always be six scores.
* Create a program that displays high, low, and average scores based on input from scores.txt. Verify that the file exists and then use string functions/methods to parse the file content and add each score to an array. Display the array contents and then calculate and display the high, low, and average score. Format the average to two decimal places. Include error handling in case the file is formatted incorrectly. Note that the program must work for any given number of scores in the file. Do not assume there will always be six scores.
* Create a program that asks the user for the name of a text/HTML file that contains HTML tags, such as: <p><strong>This is a bold paragraph.</strong></p> Verify that the file exists and then use string methods to search for and remove all HTML tags from the text, saving each removed tag in an array. Display the untagged text and then display the array of removed tags. For example: This is a bold paragraph. <p> <strong> </strong> </p>
* Using a text editor or IDE, create a text file of names and addresses to use for testing based on the following format: Firstname Lastname 123 Any Street City, State/Province/Region PostalCode Include a blank line between addresses, and include at least three addresses in the file. Create a program that verifies that the file exists, and then processes the file and displays each address as a single line of comma-separated values in the form: Lastname, Firstname, Address, City, State/Province/Region, PostalCode

## References

* cnx.org: Programming Fundamentals – A Modular Structured Approach using C++
* Wikiversity: Computer Programming