In: Computer Science
Make a modification of the program below, that will read in the string as a “command-line argument” to your program, instead of having the user type it while your program is running.
Your program should print out the inverted string to the screen.
#include <iostream>
#include <cstring>
using namespace std;
int Reverse(char * destination, const char * source, int num);
int main() // this is the test/driver code, for your function
{
const int STRINGSIZE = 10;
char oldCString[] = "Hello!";
char newCString[STRINGSIZE];
cout << "oldCString: " << oldCString << endl;
cout << "newCString before changing: " << oldCString << endl;
Reverse(newCString, oldCString, STRINGSIZE); // testing your function...
cout << "newCString after Reverse: " << newCString << endl;
return 0;
}
// Reverses a C-string passed in (source), and places the reversed
// C-string into (destination).
// (num) should represent the maximum valid length of (destination).
// If no null-zero character is found in (source) within (num-1)
// characters,the function will only read up to (num-1) characters
// from (source), and then copy the reversed characters to
// (destination) and append a null-zero to the end of it.
// The function will return the number of characters placed into
// (destination), including the null-zero.
// The function MUST use pointer notation (not array notation) inside
// it. However, you might find it useful to use array notation
// temporarily while developing the function, and then replace
// with pointer notation before turning in the assignment.
int Reverse(char * destination, const char * source, int num)
{
for (int x = 0; x < strlen(source); x++)
*( x + destination) = *( strlen(source) + source - 1 - x);
*(destination + strlen(source)) = '\0';
return 0;
}
For example, if you are running your program in the command window (by clicking the Start button, then typing in “cmd”, then pressing Enter, then using the “cd ” command to change to the appropriate directory where the compiler has placed your .exe executable file), a successful run might look like this:
M:\CS1113\Lab9>lab9.exe "This is a test"
tset a si sihT
If the user does not enter the string argument, your program should print out a brief “proper usage” message, which explains to the user the proper syntax of running your program, and which arguments to pass in. For example,
M:\CS1113\Lab9>lab9.exe
Welcome to our Lab 9 program which reverses a string!
To use this program, please use the following syntax:
lab9.exe “input string”
M:\CS1113\Lab9>
Here is some sample code which reads in arguments from the command line, and just prints them out (taken from the example at http://www.cplusplus.com/forum/beginner/5404/#msg23839 )
#include <iomanip>
#include <iostream>
using namespace std;
int main( int argc, char* argv[] )
{
cout << "The name used to start the program: " << argv[ 0 ]
<< "\nArguments are:\n";
for (int n = 1; n < argc; n++)
cout << setw( 2 ) << n << ": " << argv[ n ] << '\n';
return 0;
}
You may encounter errors in passing in the arguments. If you are using the command window (cmd.exe) on your computer (not the remote server) to run the program, make sure you build your program in “Release” mode, rather than “Debug” mode as we have typically done. This changes the default .dll libraries used by the program to the ones included in Windows.
#include <iomanip>
#include <iostream>
#include <cstring>
using namespace std;
int Reverse(char * destination, char * source, int num);
int main( int argc, char* argv[] )
{
int STRINGSIZE = 10;
char newCString[STRINGSIZE];
cout << "The name used to start the program: " << argv[ 0 ]
<< "\nArguments are:\n";
for (int n = 1; n < argc; n++)
cout << setw( 2 ) << n << ": " << argv[ n ] << '\n';
cout << "oldCString: " << argv[1] << endl;
cout << "newCString before changing: " << argv[1] << endl;
Reverse(newCString, argv[1], STRINGSIZE); // testing your function...
cout << "newCString after Reverse: " << newCString << endl;
return 0;
}
int Reverse(char * destination, char * source, int num)
{
for (int x = 0; x < strlen(source); x++)
*( x + destination) = *( strlen(source) + source - 1 - x);
*(destination + strlen(source)) = '\0';
return 0;
}
Output: