教训:TOJ[4081] God Le wants to know the directory
以前的字符串题本来就弱。。2年不写就更弱了。嗯。留作教训
God Le is the most talented ACMer in the TJU-ACM team.
When he wants to open a file,he can just use his keyboard instead of using his mouse to click.
Why he can do this?Because he uses the cmd.exe. There are many commands in cmd.exe.But God Le is kind of lazy,so he just uses three commands to change the current directory.
"cd dir"(without quotes):put you in a subdirectory.For example,if you are in C:\Programs,typing cd Vim will put you in C:\Programs\Vim.
"Disk(like C,D,etc):"(without quotes):put you in the directory in that Disk that you are in most recently.For example,if you are in C:\Programs,typing D: and C: will put you in C:\Programs.(at the beginning,when you type Disk:,you will be in Disk:\).
"cd .."(without quotes):move you up one directory.So,if you are in C:\Programs\Vim,cd .. moves you to C:\Programs.
Because God Le is very smart,he won't go to the directory that is not existed. Now,given a sequence of commands,God Le wants to know the current directory.
One thing that you should know is that God Le's computer only have four disks C,D,E,F.
HINT I:The initial directory is C:\users\godle
HINT II:every subdirectory is only a string contains no more than 10 lower-case letters.
Input
There are mulit cases.Each case begins with an integer m(1 ≤ m ≤ 10^3)means the operations.Next there are m lines.Each line contains a command.
Output
For each command,print the current directory.You can get more hints from the sample.
Sample Input
5
cd ..
D:
cd ..
cd abc
C:
Sample Output
C:\users
D:
D:
D:\abc
C:\users
题目大意:就是读命令 执行 输出结果 很简单的模拟题
但要注意一下几点
1.Disk命令: 如果当前在 C:\zhou 进行1.D: 2. C: 命令后回到C:\zhou 而不是去C:\。
2.mulit case : 英语不好就这样被坑了。。结合样例以为只有一组数据 结果WA了N遍还不知悔改
3.反斜杠赋值要这样做 c='\\'
4.读了m后 还有一个换行符没读。如果用gets()读的话,记得用一次gets()把那个换行符给过滤掉
5.当然这题用 scanf("%s") 去处理似乎更加完美 详情见下面代码
6 活用 strcat strcmp strcat
上一下大牛代码仔细分析分析
<pre name="code" class="html"><pre name="code" class="cpp"><pre name="code" class="html"><pre name="code" class="cpp">#include<stdio.h>
#include<string.h> int main()
{
freopen("a.txt","r",stdin);
freopen("c.txt","w",stdout);
char str[4][20000];
char temp[20],dir[20];
int i,m,cur,j,len;
while(scanf("%d",&m)!=EOF)
{
cur=0;
strcpy(str[0],"C:\\users\\godle");
strcpy(str[1],"D:");
strcpy(str[2],"E:");
strcpy(str[3],"F:");
for(i=0;i<m;i++)
{
scanf("%s",temp);
if(strcmp(temp,"cd")==0)
{
scanf("%s",dir);
if(strcmp(dir,"..")==0)
{
len=strlen(str[cur]);
for(j=len-1;j>=0;j--)
if(str[cur][j]=='\\')
break;
if(j>=0)
str[cur][j]=0;
}
else
{
strcat(str[cur],"\\");
strcat(str[cur],dir);
}
}
if(strcmp(temp,"C:")==0)
{
cur=0;
}
if(strcmp(temp,"D:")==0)
{
cur=1;
}
if(strcmp(temp,"E:")==0)
{
cur=2;
}
if(strcmp(temp,"F:")==0)
{
cur=3;
}
printf("%s\n",str[cur]);
}
}
return 0;
}
十分优美的代码
因为多年没写 所以先解析基础知识
1.首先strcpy
/**********************
*C语言标准库函数strcpy的一种典型的工业级的最简实现
*返回值:目标串的地址。
*对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
*参数:des为目标字符串,source为原字符串
*/
char*strcpy(char*des,constchar*source) {
char*r=des;
while(*des++=*source++);
return;
}
/*while((*des++=*source++));的解释:赋值表达式返回左操作数,所以在复制NULL后,循环停止*/
2.strcmp
最正宗的源码
/*strcmpfunction*/
#include<string.h>I
int(strap)(constchar*sl,constchar*s2)
{/*compareunsignedcharsl[],s2[]*/
for(;*sl==*s2;++sl,++s2)
if(*sl=='\O')
return(0);
return((*(unsignedchar*)sl<*(unsignedchar*)s2)?-1:+1);
}
3.strcpy
原型
extern char *strcat(char *dest,char *src);
用法
#include <string.h>
在C++中,则存在于<cstring>头文件中
功能
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
char*strcat(char*strDest,constchar*strSrc)
{
char*address=strDest;
while(*strDest)
strDest++; while(*strDest++=*strSrc++)
{}
return address;
}
仔细分析分析这道字符串题代码
很容易发现这类题目函数scanf ()的奇妙运用比Gets()好很多利用string的函数更是完美。
字符串的题目就是要多模仿代码。
上我丑陋的代码了
#include<stdio.h>
char A[101];
char s[5][1010];
int temp[5],d=0;
int main()
{
freopen("a.txt","r",stdin);
freopen("b.txt","w",stdout);
int n=0,i=0,j=0,t=0,x=0,z=0;
while(scanf("%d",&n)>0)
{
i=0,j=0,t=0,x=0,z=0,d=0;
memset(temp,0,sizeof(temp));
memset(s,0,sizeof(s));
temp[0]=2;
strcpy(s[0],"C:\\users\\godle");
strcpy(s[1],"D:");
strcpy(s[2],"E:");
strcpy(s[3],"F:"); gets(A);
for(i=1;i<=n;i++)
{
memset(A,0,sizeof(A));
gets(A);
if(A[0]=='c'&&A[1]=='d')
if(A[3]=='.')
{
t=0;x=0;
if (temp[d]==0) {printf("%c%c",s[d][0],s[d][1]); printf("\n");}
else {
temp[d]=temp[d]-1;
for(t=0;t<=temp[d];x++)
{
if(s[d][x]=='\\') t++;
if(t<=temp[d]) printf("%c",s[d][x]);
}
s[d][x-1]=0;
printf("\n");
}
}
else
{
temp[d]=temp[d]+1;
for(x=0;s[d][x]!=0;x++)
printf("%c",s[d][x]);
s[d][x]='\\';x++;z=x-1;
for(t=3;A[t]!=0;t++,x++)
s[d][x]=A[t];
s[d][x]=0;
for(x=z;s[d][x]!=0;x++)
printf("%c",s[d][x]);
printf("\n");
}
else
{
if(A[0]=='C') d=0;
else if(A[0]=='D') d=1;
else if(A[0]=='E') d=2;
else if(A[0]=='F') d=3;
for(x=0;s[d][x]!=0;x++)
printf("%c",s[d][x]);
printf("\n");
}
}
}
return 0;
}
教训:TOJ[4081] God Le wants to know the directory的更多相关文章
- 【转】DCC32的参数详解
完整的内容如下: // DCC32编译器的设置说明. // Dcc32 [options] filename [options] // DCC32 [操作选项] 文件名称 [操作选项] // -A&l ...
- 关于要python爬虫你需要的一些网址和信息[待补充]
phantomjs无头浏览器(基本不用) http://phantomjs.org/download.html 如果报 下面这种错误 [root@hwgz01 ~]# phantomjs phanto ...
- Le lié à la légèreté semblait être et donc plus simple
Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...
- 新人入职100天,聊聊自己的经验&教训
这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...
- TOJ 2776 CD Making
TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性... 贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...
- LVM原理及PV、VG、LV、PE、LE关系图
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区.VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立 ...
- android socket编程用Bufferreader读取的一个失败教训
由于我的手机需要用笔记本开的wifi,躺在床上玩手机时需要关电脑或者是要让电脑放歌的时候总是不想下床,于是我想能不能用一个APP,然后通过局域网实现在手机上对电脑进行操控呢?说干就干. 我在电脑上用的 ...
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...
- android4.3 Bluetooth(le)分析之startLeScan分析
BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处.本文档主要分析这类方法的执行流程,来了解下le到底 ...
随机推荐
- robots.txt网站爬虫文件设置
目录: 什么是robots.txt robots.txt使用误区 robots.txt使用技巧 什么是robots.txt? robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.Robo ...
- Git服务器 gitweb与gitLab的区别
昨天我们已经把Git服务器搭建完成了,工程的上传与下载都可以了,不过有些人不喜欢使用git命令进行操作.所以我们就搭建一个可视化操作的环境!配置gitweb和gitlab两种访问方式! 一,配置git ...
- Swift学习之类和结构体的创建
随着一步步的学习,学习到的新知识越来越多了,不管是新的还是旧的,都禁不住时间的堆积,再熟悉的知识点时间久了都会渐渐的忘记,也许这就是人们生活中一种潜在的惰性吧,看似非常熟悉的东西,等到真正要用的时候, ...
- ASP.NET内核几大对象、ASP.NET核心知识(6)--转载
这篇博文主要介绍一下几个对象. 1)HttpContext 2)HttpRequest 3)HttpResponse 4)context. Server 5)context.Session HttpC ...
- vs中动态DLL与静态LIB工程中加入版本信息的方法
说明:本文仅针对刚接触VS不久的新手们(包括ME),提供的一点小Tips,同时也是小生的首篇Blog文章,请大伙多多担待O(∩_∩)O哈! 步骤1 - 在工程中右键添加新建项 步骤2 - 选择创建RC ...
- QQ中未读气泡拖拽消失的实现(参照一位年轻牛B的博主的思路自己实现了一下)
原文链接:http://kittenyang.com/drawablebubble/,博主年轻却很有思想.相仿的年纪,很佩服他! 首先分析拖拽时的图,大圆.不规则的图(实际上时有规律的不然也画不出来, ...
- TCP的流量控制(转载)
1.TCP的滑动窗口 为了提高信道的利用率TCP协议不使用停止等待协议,而是使用连续ARQ协议,意思就是可以连续发出若干个分组然后等待确认,而不是发送一个分组就停止并等待该分组的确认. TCP的两端都 ...
- Hello Word!
第一次来博客园,作为技术的基站,多余的话不说了,就一个helloword! <script type="text/javascript"> //等待dom元素加载完毕. ...
- python-整理--连接MSSQL
环境 : python3.4 / win10 / vs2013 / sqlexpress2014 需要的工具和包 1.freetds包 下载地址 https://github.com/ramiro/f ...
- PyQt4.11.3(python3.4+QT4)ui文件生成py文件
最近开始接触学习Python,所以想用QT弄个窗体程序出来玩玩,环境是Python3.4.2.PyQt4.11.3-Py3.4.Win7.用PyQt自带的Designer设计出一个窗体ui文件后,需要 ...