tags:

views:

42

answers:

2

I've been trying to run a program that will invert the order of a string and to run it, I have to type a second argument in prompt.

 int main(int argc, char* argv[])
 {
     string text = argv[2];
     for (int num=text.size(); num>0; num--)
     {
         cout << text.at(num);
     }
     return 0;
 }

e.g. ./program lorem result: merol

+1  A: 

I think you're getting an exception because num is out of bounds. size() is returning a value one larger than the biggest valid index into the string, so at() is throwing an exception.

Fred Larson
+4  A: 
#include <iostream>
#include <string>

using namespace std;

 int main(int argc, char* argv[])
 {
     string text = argv[1];
     for (int num=text.size() - 1; num >= 0; num--)
     {
         cout << text.at(num);
     }
     return 0;
 }

You missed the includes and used string::at wrong. There are size() chars in the string but you start counting at 0. Then the loop has to run until num >= 0 and not num > 0. You also used the wrong index into argv.

This would still be an abomination of C++. A clearer way would be:

#include <iostream>
#include <string>
#include <algorithm>

int main(int argc, char* argv[])
{
  std::string text = argv[1];
  for(std::string::reverse_iterator it = text.rbegin(); it != text.rend(); ++it) {
    std::cout << *it;
  }
  std::cout << std::endl;
  //or if you want further usage of the reversed string

  std::reverse(text.begin(), text.end());
  std::cout << text;

  return 0;
}
pmr