使用用户定义的函数进行字符串反向

时间:2018-11-03 21:12:37

标签: c++

我正在尝试使用堆栈来反转字符串,但是问题是我自己定义了函数而不使用了库。这是代码:

nullptr

现在,根据代码,字符串应该已经反转了,但是我得到以下输出:

const int size = 50;
int top = -1;
char C[size];
int i = 0;

void push(int x){
    top++;
    if (top > size)
        cout << "Error: Stackoverflow" << endl;
    else
        C[top] = x;
}

bool isEmpty() {
    if (top < 0)
        return true;
    else
        return false;
}

bool isFull() {
    if (top > size)
        return true;
    else
        return false;
}

void pop() {
    if (isEmpty())
        cout << "Error: The stack is empty!" << endl;
    else
        top--;
}

int Top() {
    return C[top];
}

void Reverse(char *C, int n) {
    // For Push
    for (i = 0; i < n; i++)
        push(C[i]);

    // For pop
    for(i = 0; i < n; i++) {
        C[i] = Top();
        pop();
     }
}

int main() {
    cout << "Enter the string: ";
    cin >> C;
    Reverse(C, strlen(C));
    cout << "The reversed string is: " << C;
    return 0;
}

我很确定push()正确完成了,但是我猜pop()有问题吗?

1 个答案:

答案 0 :(得分:0)

您正在为字符串和堆栈使用相同的数组,因此在C[i] = Top();中,您将替换最后一个字符中的第一个字符,并将其丢失。

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

const int size = 50;
int top = -1;
char C[size];
char stack[size];
int i = 0;

void push(int x)
{

    top++;
    if (top > size)
    {

        cout << "Error: Stackoverflow" << endl;
    }

    else
    {

        stack[top] = x;
    }
}

bool isEmpty()
{

    if (top < 0)
    {

        return true;
    }
    else
    {

        return false;
    }
}

bool isFull()
{

    if (top > size)
    {

        return true;
    }

    else
    {

        return false;
    }
}

void pop()
{

    if (isEmpty())
    {

        cout << "Error: The stack is empty!" << endl;
    }
    else
    {

        top--;
    }
}

int Top()
{

    return stack[top];
}

void Reverse(char *C, int n)
{

    // For Push
    for (i = 0; i < n; i++)
    {

        push(C[i]);
    }

    // For pop
    for (i = 0; i < n; i++)
    {

        C[i] = Top();
        pop();
    }
}

int main()
{

    cout << "Enter the string: ";
    cin >> C;
    Reverse(C, strlen(C));
    cout << "The reversed string is: " << C;
    return 0;
}