tags:

views:

85

answers:

1

So below I have a code in C++ that is supposed to invert the arguments in a vector, but not the sequence. I have listed my problems as sidenotes in the code below. The invert function is supposed to invert each argument, and then the main function just outputs the inverted words in same order For instance, program("one two three four")=ruof eerth owt eno

 #include <iostream>
 #include <string>
 using namespace std;

 int invert(string normal)
{
     string inverted;
     for (int num=normal.size()-1; num>=0; num--)
     {
         inverted.append(normal[num]);    //I don't know how to get each character
                                          //I need another command for append
     }
     return **inverted**;  <----
 }

 int main(int argc, char* argv[])
 {
     string text;
     for (int a=1; a<argc; a++)
     {
         text.append(invert(argv[a])); //Can't run the invert function
         text.append(" ");
     }
     cout << text << endl;
     return 0;
 }
+3  A: 

The problem is that normal[num] is a character. append() doesn't have an overload for characters.

You can use inverted.push_back(normal[num]);

See the string API.

I should add a couple other notes:

0) Why are you returning int from invert()? inverted is a string, so you should return a string:

`string invert(string normal);`

1) Rather than using num to iterate, you can use reverse_iterators:

for (string::reverse_iterator c = normal.rbegin(); c!=normal.rend(); ++c) {
  inverted.push_back(*c);
}

2) When passing strings to functions that do not get modified in the function, you should pass by reference to avoid extra string copies.

string invert(const string &normal); 

3) You're traversing 0..argc, so your reversed strings will be backwards from what is expected, if I understand your requirements correctly.

Stephen