解答论坛上问题时碰到的问题,请高手看下

weiyijiji 2008-05-29 10:41:30
问题是要输入1个字符串 ,比如dsa\dw\fd,以fd\dw\dsa输出,我的思路是用栈保存最后1个是‘\’的字符串(加上可能出现的最后一个'\'后的字符串)
现在的问题是中间用来临时保存的字符串变量好象有问题
代码如下
/*
输入字符串 如ddas\daw\db
输出 db\daw\ddas
*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef struct Stack{
char * stack[MAX];
int top;
}Stack;
void init(Stack &);
void push(Stack &,char *);
void pop(Stack &);
char* gettop(Stack &);
int empty(Stack &);

void main(){
char ch[20];
//用栈存放'\'分割的字符串
Stack s;
char tm[20];
init(s);
//tmp:每个压入栈的字符串的长度
int tmp=1,len,count=0,n=0;
fgets(ch,MAX,stdin);
len=strlen(ch);
while(count<len){
if(ch[count]=='\\')
{

//判断是不是第1次入栈
if(n==0)
{
strncpy(tm,ch,tmp);
tm[tmp]='\0';
}
else
{
strncpy(tm,ch+count+1-tmp,tmp);
tm[tmp]='\0';

}
push(s,tm);

tmp=0;
n++;

}
//把最后一个'\'后的字符串压入
if(count==len-1)
{
if(ch[count]!='\\'){
strncpy(tm,ch+count-tmp+1,tmp);
tm[tmp]='\0';
push(s,tm);

}

}
count++;
tmp++;
memset(tm,'0',sizeof(char)*19);

}
while(empty(s)==0){
printf("%s",gettop(s));

pop(s);

}
}


void init(Stack &s){
s.top=-1;


}
void push(Stack &s,char *tmp){
if(s.top==MAX)
{
printf("full!");
exit(1);
}

s.stack[++(s.top)]=tmp;
}
void pop(Stack &s){
if(s.top==-1)
{
printf("empty!");
exit(1);
}
else
(s.top)--;


}
int empty(Stack &s){
if(s.top==-1)
return 1;
else
return 0;

}
char * gettop(Stack &s){
return s.stack[s.top];
}

请高手指正 谢谢



...全文
90 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
关注开源四轴项目也有近一年了,前期都以潜水为主,业余间主要是在啃那些控制和导航的理论书籍。最近开始动手做了,打算先从电调开始,发现真要做起来问题还真是一大堆。所幸有论坛这么好一个交流平台,很多问题其实前人都已经碰到过了,参考前人的经验,让我少走了很多弯路。在此要感谢论坛各位前辈大侠和阿莫的ourdev。:-) 前人种树、后人乘凉,既然受惠于前人,怎好意思独享,当然也应该帮助一下新入门的开发者。由于四轴分论坛的帖子数量已经很多了,光搜一下无刷电机和电调也有近百来篇帖子,次序和深浅程度不一,想要看完并完全理解这些帖子对新人来说不啻是一个艰巨的任务。而且很多帖子的发帖间都比较久远了,回帖提问也未必能得到原作者的回答。我写这篇文档的目的,就在于做一个整理和汇编,把很多零散的、前人已解答过的问题分门别类整理出来,并添加一些自己制作电调的经验和总结。 在参考一些关于无刷电机驱动的书籍和帖子的候,发现高手或是大师好像都比较惜字如金,一些问题往往点到为止或者一笔带过,有些看似简单的问题会让像我这样的电调DIYer困惑很久。所以在本文行文,笔者力图把问题以大白话的形式说明白,如果各位有觉得哪里看得不明不白的,可以回帖提出(限一个月,呵呵),我会修改文档以试图将问题讲清楚。如果有些问题我无法回答,我会老老实实跟你说我也没搞清楚,还要高手来解惑啊。如果发现我哪些内容讲错了,也不吝指正。 最后还将附上德国MK项目电调代码(V0.41版本)的全代码分析,这件事可能以前没人做过吧,我就来揭晓一下答案好了^ ^。同我也参照他的程序,自己写了一个可供mega8和mega32使用的电调驱动程序,将一些结构作了优化,所有变量名都从德语改成了英语,添加了比较完备的中文注释,通讯规约也做了一些整理和改动,并附带上位机调试程序。也希望大家能多多把自己的一些心得体会和经验拿出来,建立好一个基础的知识平台后,可以让后来的开发者少走很多初期摸索的弯路,而专心于攻克我们未能解决的难点。衷心希望后来的开发者能站在我们的肩膀上,走得比我们更远。 timegate
Basic4android(简称B4A)是一个简单然而功能非常强大的Android应用开发环境。Basic4android语言类似于Visual Basic语言,支持更多的对象。Basic4android将代码编译成Android原生(native)应用,无需其它运行环境的支持。与其它的集成开发环境不同,Basic4android是完全用于Android应用开发的开发工具,不支持其它平台。Basic4android包含一个强大的GUI设计器,内建对多屏和坐标的支持,不需要开发者再写XML。开发者可以在Basic4android环境下利用Android模拟器或Android物理设备(利用USB连接或通过本地网络连接)进行程序开发和调试。 Basic4android带有丰富的库函数,支持所有的Android 核心特性,因而使其非常容易进行高级应用开发。这些库函数包括:SQL数据库、GPS、串口(蓝牙)、照相机、XML、JSON、Web服务(HTTP)、后台服务、动画、网络(TCP和UDP)、文本阅读(TTS)和声音识别、Web浏览、移动电话广告(AdMob)、图表、OpenGL、图像,等等。与Eclipse一样,B4A编译出来的编程是伪编译的,即安卓手机上运行这些编译出来的程序,是解析执行的。因为JAVA本身就是伪编译。 版本:2013-11-24 设计:沉默蜂 QQ793136625 性质:免费软件 功能: 1、查看库的结构,包括库、类和类成员的注解内容,我提供了纯文本方式和网页方式显示(有的注解有超链接) 2、提供修改Comment节点值的功能,而B4A代码区里的智能提示就是读取这个节点的值; 3、通过手工把一个个需要修改的提示内容变成中文后,把这个改为中文提示内容的XML文件当作为一个数据库,单独放好,以后B4A有新版本出来后,用这款软件底部所提供的汉化按钮对新版本的智能提示进行汉化,软件会一一去匹配每一个文件中是否存在相同的类、类成员,然后用数据库(即修改好的XML文件)里的注解去替换未汉化的注解。 其它: 为了让B4A能早日真正走进中国而开发设计。目前中国国内研究B4A的不多,软件的右上角网址列表提供了几个B4A相关的网站,另外还增加了一个国人开发的用中文编写安卓手机软件的开发工具——易语言FOR安卓(简称E4A) 为了编写这款B4A分析器,每天晚上忙到深夜12点,休息天也是白天忙到深夜。希望大家能珍惜这款软件,如果你觉得这款软件没什么了解起的,有本事你自己也去编写一款。 要想B4A最终走进中国,最关键的作法就是对B4A较熟悉人能经常到B4A中文官网给大家解答,而不懂的人常到B4A中文官网发帖子,间一久,论坛上就积累了很多学习资料,利已利他人。而目前有很多人只考虑眼前利益,有问题在B4A群里求问,自己解决了,或有高手帮你解答了,也没有意识要到B4A中文官网把问题解答方案通过发帖子的形式留给今后会碰到相同问题的人员。这样做的后果是,最终形成有很多人到处求人解答问题。 我2013年5月份左右开始接触,但一直忙于其它事,至今仍不会用B4A编写代码,更不要说熟悉这个B4A环境。即便我这款软件编写后,我也不可能去全身心投入这款软件编程,我还有其它人生中更重要的事要做。以后有空,我偶尔会熟悉一下这款软件的工作环境,因为至今我仍对这款软件的工作环境不熟悉。 目前有少数一部人就是在用B4A给人编写商业软件,如果这些人能制作大量的B4A教学视频,那么B4A在中国的普及还将大大加快。但往往靠编程吃饭的,往往对于奉献之类的没什么热情 ,一个理由,我要靠编程养家,没间。目前网上这么多软件,难道都是吃编程这碗饭无私编写的吗,不是,80%是些不从事编程工作的人员编写的。对于B4A的发展,B4A引入中国,我已尽了我的一片热情。

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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