我正在尝试使用堆栈来反转字符串,但是问题是我自己定义了函数而不使用了库。这是代码:
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()有问题吗?
答案 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;
}