Home > Software engineering >  C string returning as "
C string returning as "

Time:11-17

I am trying to write a function that reverses a string. I've figured out most of the code, and when I print the string to std::cout, it's showing what I need. But, when I test the code, the result is that I got " from the function. Here's my code:

#include <iostream>
#include <string>
using namespace std; 
string result;
string reverseString (string str)
{
  for(int i = str.length(); i >= -1; i--) {
    result = str[i];
  }
  cout << result;
  return result;
}

CodePudding user response:

In this for loop, in the very first iteration:

  for(int i = str.length(); i >= -1; i--) {
    result = str[i];
  }

The terminating zero character '\0' is being written in the first position of the object result, because the expression str[i] is equivalent in this case to the expression str[str.length()].

So, the result string is outputted as an empty string.

Also, you are trying to access the source string using the negative index -1, which results in undefined behavior.

Instead of this for loop, you could just write:

result.assign( str.rbegin(), str.rend() );

If you want to do the task using the for loop, then the loop can look like the following:

result.clear();
result.reserve( str.length() ); 

for ( auto i = str.length(); i != 0; ) {
    result  = str[--i];
}

Pay attention to that, it is a bad idea to use the global variable result within the function. The function could look like:

std::string reverseString( const std::string &str )
{
    return { str.rbegin(), str.rend() };
}
  • Related