- In this homework assignment, you must define a number of functions that can be used to analyze and manipulate C-strings.
Before C++ and classes, strings were stored in simple arrays of characters. The term C-string refers to the classic implementation of strings in the C programming language. A C-string is a sequence of characters terminated by the null character, ‘\0’. Since C is part of C++, C-string implementations are valid in C++ as well as C.
Recall that an array of characters is the underlying data structure for storing C-strings. For example, this definition creates such an array.
myString will be capable of holding a C-string with up to 99 characters before the terminating null character. Of course, myString can hold a shorter C-string, too. For example, these assignments give myString the value “xyz”.
It is legal to initialize a string variable, like this.
Now, the string example contains the following:
| F | i | r | s | t | | v | a | l | u | e | \0 | * | * |…
However, it is not legal to assign string variables, because you cannot assign to an entire array.
Furthermore, you cannot do comparisons like this.
The comparison myString == “xyz” is actually legal (it will compile the addresses, not the strings!), but it will always evaluate to false. To handle these kinds of difficulties, programmers can rely on the C-string library (also referred to as ). This library, which is part of every proper C++ installation, is an extensive collection of functions for handling C-strings. Following are the 4 basic string library functions that we’ll discuss:
Returns the number of characters in the string, not including the null character.
(2) strcmp(str1, str2)
This function takes two strings and compares them. If the strings are equal, it returns 0. If the first is greater than the 2nd, then it returns some value greater than 0. If the first is less than the 2nd, then it returns some value less than 0.
You might use strcmp() as in:
The ordering for strings is lexical order based on the ASCII value of characters. Remember that the ASCII value of ‘A’ and ‘a’ (i.e., upper/lowercase) are not the same.
An easy way to remember how to use strcmp() to compare 2 strings (let’s say a and b) is to use the following mnemonics:
a == b strcmp(a, b) == 0
a < b strcmp(a, b) < 0
a >= b strcmp(a, b) >= 0
(3) strcpy(dest, source)
Copies the contents of source into dest, as in:
Now, the string str1 contains the following:
| s | e | c | o | n | d | \0 | u | e | \0 |
and the word “initvalue” has been overwritten. Note that it is the first null character (\0) that determines the end of the string. When using strcpy(), make sure the destination is big enough to hold the new string.
Note: An easy way to remember that the destination comes first is because the order is the same as for assignment, e.g:
dest = source
Also, strcpy() returns the destination string, but that return value is often ignored.
(4) strcat(dest, source)
Copies the contents of source onto the end of dest, as in:
Now, the string str2 contains the following:
| f | i | r | s | t | | o | n | e | \0 |
When using strcat(), make sure the destination is big enough to hold the extra characters.
Note: Function strcat() also returns the destination string, but that return value is often ignored.
Your task in this assignment is to complete your own versions of these four most commonly used standard string functions.
int mystrlen( const char *s)
int mystrcmp( const char *s1, const char *s2)
char *mystrcpy( char *s1, const char *s2)
char *mystrcat( char *s1, const char *s2)
|C standard string library functions:|
int strlen( const char *s)
int strcmp( const char *s1, const char *s2)
char *strcpy( char *s1, const char *s2)
char *strcat( char *s1, const char *s2)
Each of your functions should have the same behavior as the corresponding above C standard string function. For example, your mystrlen function should have the same behavior as the C standard strlen function.
Your functions should not call any of the standard string functions. In the context of this assignment, you should pretend that the standard string functions do not exist.
You should pay special attention to boundary cases. In particular, make sure that your functions work when given empty strings as arguments. For example, make sure that the function call mystrlen(“”) returns 0.
First create a header file named mystring.h containing the interface to your functions. The interface should consist of a set of function declarations. Then create a file named mystring.cpp containing the implementation of your functions, that is, a set of function definitions. It should “#include” the interface file to insure that each function definition is consistent with its declaration.
You may use array notation to define your functions. For example, this is an acceptable version of the mystrlen function:
However we encourage you to use pointer notation instead of array notation to define your functions; pointer notation is used heavily throughout the course, and it would be wise to use this assignment to insure that you are comfortable with it. For example, we encourage you to define your mystrlen function similar to this:
The comment should appear in both the .h file (for the sake of the users of the function) and the .cpp file (for the sake of the implementation of the function).
For example, here is an appropriate way to comment a mystrlen function:
Note that the comment explicitly states what the function returns, and explicitly refers to the function’s parameter (pcString).
Download Test Driver: We provide a driver (file Assign2driver.cpp, Note: please insert one line: #include <cstring> right between line: #include <iostream> and line: using namespace std;) that you can download and use for some testing of your code. If no any error outputs, your program passes all the tests. Otherwise, it will tell you the line numbers of errors in your source codes.