为什么字符串不会在堆栈中推送或弹出
Why won't the string push or pop in stack
这是交给我的作业。 我是一个菜鸟,刚开始编程。 字符串作为一个整体不会推送到堆栈以及如何弹出它。
问题陈述:- 将一个由全名组成的整个字符串分开,将字符串分成 3 个部分以获得名字中间名和姓氏,并按姓氏的顺序显示它们 名字中间名 仅使用堆栈。
我试过使用 2D 堆栈
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string>
using namespace std;
using std :: string;
char s1[100];
char s2[50],s3[50],s4[50];
int i=0,j=0,k=0,max1=9,top=-1;
char stack[10][10];
char re[10];
void push(char val[])
{
if(top>=max1)
{
cout<<"Stack overflow";
}
else
{
top++;
int a=0;
for (int i=0;i<stack[top][' '];i++)
{
stack[top][a]=val[i];
a++;
}
}
}
char* pop()
{
if(top<0)
{
cout<<"Stack underflow";
}
else
{
//for(int j=0;j<=top)
for(int i=0;i<stack[top][' '];i++)
{
re[i]=stack[top][i];
top--;
return re;
}
}
}
void divstring()
{
for(i=0;s1[i]!=' ';i++)
{
s2[i]=s1[i];
}
s2[i]=' ';
i++;
while(s1[i]!=' ')
{
s3[j]=s1[i];
j++;
i++;
}
s3[j]=' ';
i++;
while(s1[i]!=' ')
{
s4[k]=s1[i];
k++;
i++;
}
s4[k]=' ';
i++;
}
int main()
{
//clrscr();
cout<<"Enter the string: ";
gets(s1);
divstring();
cout<<"The 1 part is "<<s2<<endl;
cout<<"The 2 part is "<<s3<<endl;
cout<<"The 3 part is "<<s4<<endl;
// getch();
push(s1);
push(s2);
push(s3);
cout<<pop();
return 1;
}
没有编译时错误,但字符串不会被推送到堆栈上或弹出。
这里有多个问题。
没有 2D 堆栈这样的东西。堆栈是一维的。它有一个可用的末端。在C++中,您可以使用std::stack,push((,pop((和empty((。
您需要摆脱全局变量。
您似乎想实现自己的堆栈。你需要决定,你是否要实现一个堆栈,这是一个问题。或者,是否要使用现有堆栈来执行分配?这是一个不同的问题。我无法区分两者。
你应该使用 std::string。
您不处理边界条件。例如,传递一个没有空格的字符串将无限循环
for(i=0;s1[i]!=' ';i++)
推送功能很混乱,这是一个工作版本
void push(char val[])
{
if (top >= max1)
{
cout << "Stack overflow";
}
else
{
top++;
int i = 0;
for (; val[i] != ' '; i++)
stack[top][i] = val[i];
stack[top][i] = ' ';
}
}
有很多方法可以改善这一点,您可以使用 Cstrcpy
函数而不是手动复制字符串。或者,上帝保佑,您可以使用一些C++,例如std::string
和std::stack
.
相关文章:
- 如何使用堆栈将字符串输入拉伸 k 次
- 带有模板的字符串堆栈?
- 在堆或堆栈上分配的动态创建的字符串 - C
- GCC C++堆栈上的字符串
- JNI、C++在堆栈中推送字符串
- 我的 c 字符串复制函数正在损坏其他变量的堆栈
- 无法创建栅格堆栈,因为我无法连接字符串(dir_name + 文件名)
- 如何在 C++03 中没有重复代码的情况下在堆栈上创建一个非常量 C 字符串数组?
- 为什么字符串不会在堆栈中推送或弹出
- 我如何转换一个基于动态的,基于指针的int堆栈,以便将其打印成字符串
- 我在 36603 以上输入的任何数组大小时都会返回"堆栈溢出"错误。如何使字符串能够捕获整个.txt文件?
- 使用堆栈将字符串格式的十进制转换为双精度
- 查看使用堆栈是否相等的两个字符串
- C#到C代码P/调用多个std:字符串声明导致堆栈损坏
- palindrome功能(字符串,堆栈,队列)
- 堆栈上的 Const C 字符串
- 使用堆栈测试字符串中的x和y是否相等
- 将字符串放入堆栈C++时出错
- 如何将字符串推入堆栈
- C++ 堆栈字符串流函数返回整数与 ASCII