Word Reversal

redredblue 2016-10-21 11:41:45
最近数据结构刚学的栈,做这道题,c++和c掺着用的
下面是我的代码 ,求问这样写有什么问题,怎么改,或者这样写不行?
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

#define MAXSIZE 100
typedef char SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}stack;

int initstack(stack &q){
q.base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));
if(!q.base) return 0;
q.top=q.base;
return 1;
}

int main()
{
char a[1000];
stack q;
initstack(q);
int n,i;
cin>>n;
while(n--)
{
char e;
while((e=getchar())!='\n')
{//读取一个字符,让该字符进栈,如果字符是空格的话,删除栈顶元素,并用e返回其值存储在数组里,直到栈空
*q.top++=e;//进栈
if(e==' ')//有一个问题:如果e是空格能存入栈吗
{
for(i=0;q.top!=q.base;i++)
{
e=*--q.top;
a[i]=e;
}
}
}
for(int j=1;j<i;j++)
cout<<a[i];
cout<<endl;
}
return 0;
}

...全文
339 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-10-24
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 版主 2016-10-23
  • 打赏
  • 举报
回复
你的while((e=getchar())!='\n') 根本进入不了,因为getchar会接收掉上一次cin>>n时留在缓冲区中的\n 你可以在cin>>n 后面先加一个getchar() 接收掉它
paschen 版主 2016-10-22
  • 打赏
  • 举报
回复
for(int j=1;j<i;j++) cout<<a[i]; 这里的 i ,你没有初始就使用了
redredblue 2016-10-22
  • 打赏
  • 举报
回复
引用 8 楼 paschen 的回复:
有可能没有执行到 for(i=0;q.top!=q.base;i++)
楼主 ,不纠结这个问题 ,这个问题很好改 ,能帮我看一下这个算法吗,过程有没有错,谢谢
paschen 版主 2016-10-22
  • 打赏
  • 举报
回复
有可能没有执行到 for(i=0;q.top!=q.base;i++)
redredblue 2016-10-22
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
for(int j=1;j<i;j++) cout<<a[i]; 这里的i [quote=引用 4 楼 redredblue 的回复:] [quote=引用 2 楼 paschen 的回复:] for(int j=1;j<i;j++) cout<<a[i]; 这里的 i ,你没有初始就使用了
初始化了 在主函数的第四行 [/quote] 那只是声明,不是初始化,你得给他一个初始值[/quote] 还有楼主 我觉得中间部分的代码有一些比较大的问题 你能帮我看看吗ಥ_ಥ
redredblue 2016-10-22
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
for(int j=1;j<i;j++) cout<<a[i]; 这里的i [quote=引用 4 楼 redredblue 的回复:] [quote=引用 2 楼 paschen 的回复:] for(int j=1;j<i;j++) cout<<a[i]; 这里的 i ,你没有初始就使用了
初始化了 在主函数的第四行 [/quote] 那只是声明,不是初始化,你得给他一个初始值[/quote] for(i=0;q.top!=q.base;i++) { e=*--q.top; a[i]=e; 这里 i 有值了 ,表示数组有i+1个元素,可以拿过来用啊
paschen 版主 2016-10-22
  • 打赏
  • 举报
回复
for(int j=1;j<i;j++) cout<<a[i]; 这里的i
引用 4 楼 redredblue 的回复:
[quote=引用 2 楼 paschen 的回复:] for(int j=1;j<i;j++) cout<<a[i]; 这里的 i ,你没有初始就使用了
初始化了 在主函数的第四行 [/quote] 那只是声明,不是初始化,你得给他一个初始值
redredblue 2016-10-22
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
for(int j=1;j<i;j++) cout<<a[i]; 这里的 i ,你没有初始就使用了
初始化了 在主函数的第四行
redredblue 2016-10-22
  • 打赏
  • 举报
回复
初始了 在主函数的第四行
redredblue 2016-10-21
  • 打赏
  • 举报
回复
Sample Input 3 I am happy today To be or not to be I want to win the practice contest Sample Output I ma yppah yadot oT eb ro ton ot eb I tnaw ot niw eht ecitcarp tsetnoc

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧