Ankit_jackar
Ankit_jackar

Reputation: 23

Reversing string using stack (static array) in c++

i am new to this concept in c++ i am trying to reverse string using stack static array implementation in c++. Input: qwerty expected output: ytrewq output which i am getting is: trewq Can some one explain me why is this happening and any possible solution. Here's my code

#include <iostream>
#include <string>
using namespace std;
#define SIZE 10

string arr[SIZE];
unsigned a = -1;

void push(char ch) {
    a = a + 1;
    arr[a] = ch;
}

void pop() {
    a = a - 1;
}

void display() {
    for (int j = a; j >= 0; j--)
        cout << arr[j];
}

int main() {
    string str;
    getline(cin, str);
        for (int i = 0; i < (str.length() - 1); i++)
            push(str[i]);
        display();
}

Upvotes: 0

Views: 1023

Answers (3)

Joop Eggen
Joop Eggen

Reputation: 109547

You push everything on the stack, so the last element can be popped first. Then do popping to fill a reversed strng. The stack should be a char array.

As this is typically a task, the rest is your puzzle.


Pop typically gives you the top element as:

char pop() {
    char ch = arr[a];
    --a;
    return ch;
}

Upvotes: 1

MatthieuL
MatthieuL

Reputation: 524

Remove the "-1" in :

for(int i=0;i<(str.length())-1;i++)

Else your array doesn't contains the last character. I made the test without the -1, it works well. The condition "< str.length()" is enough to loop on all string caracter.

In similar case, use the debugger to see what contains your variable. In these case the variable "arr" don't contains the last input caracter.

Upvotes: 2

GrahamS
GrahamS

Reputation: 10350

The correct way to reverse a string would be to do:

std::reverse(str.begin(), str.end());

But I think this might be homework/study so look at your output. You are just missing the last letter. That suggests the upper limit of your loop is wrong doesn't it?

Upvotes: 0

Related Questions