标题: [文本处理] [练习]批处理还原这个难以理解的C代码 [打印本页]
作者: 523066680 时间: 2010-6-10 20:21 标题: [练习]批处理还原这个难以理解的C代码
该代码我是从
http://coolshell.cn/?p=2420
看到的
(挺优美的说,就是看不懂,也没有看到inlcude 怀疑是开头的M A G I C作祟)
#define M 002354l
#define A 000644l
#define G 000132l
#define I 000322l
#define C 000374l
#define a ;
#define b for
#define c ++
#define d %
#define e int
#define f ,
#define g -
#define h 011
#define i =
#define j {
#define k )
#define l '\n'
#define m main
#define n <
#define o }
#define p >
#define q &&
#define r (
#define s ||
#define t ?
#define u putchar
#define v void
#define w '*'
#define x :
#define y ' '
#define _ /
#define C_O_O_L return
e u r e k a
e
m r
v k j
j j j j
j j j j j
j j j j j j
j j j j j j j
j e z a b r z i
M _ A _ G _ I _ C
a z n G a u r z d h
+ z _ h p M _ A q z d
h + z _ h n M _ G q z _
h n z d h + M _ I q z _ h
p z d h g M _ C t w x y k f
z d h g h + 1 s u r l k f z c
k a u r l k a j j j j j j j j j
j j C_O_O_L M _ A _ G _ I _ C a o
o o o o o o o o o o o o o o o o o o
o o o o
o o o o
o o o o
o o o o
题目是:
根据#define 的替换内容,将代码尽可能的还原为可阅读的C语言代码(不要求排版)
恩 ,需要C语言的基础知识(知道#define 即可)
自选脚本语言(尽量在BAT和VBS选1啦),(自己也在做,碰到点问题,感觉不错,就拿上来了),
一起练习吧~
[ 本帖最后由 523066680 于 2010-6-10 20:28 编辑 ]
作者: 523066680 时间: 2010-6-10 22:03
为了方便处理,可以分为两个文本读取。
举出一个我头疼的问题吧:
b 替换为 for
而后面有 f 替换为 ","
如何让一个字符不被再次替换呢? 我刚刚想用vbs 吧替换过的字符改为数值来避免……
写的不咋样,也没写完
作者: 随风 时间: 2010-6-10 22:08
a.txt 内容为 #define 开头的行
b.txt 内容为 剩余的行
未排版
:- @echo off&setlocal enabledelayedexpansion
- for %%a in (M A G I C) do set .D%%a=%%a
- for /f "tokens=1,2* delims= " %%a in (a.txt) do (
- set #%%b=%%c
- if "!.D%%b!"=="%%b" set .%%b=%%c
- )
- for /f "delims=" %%i in (b.txt) do (
- set "str="
- for %%j in (%%i) do (
- if "!.D%%j!"=="%%j" (set str=!str! !.%%j!) else (
- set str=!str! !#%%j!
- )
- )
- echo !str!
- )
- pause
复制代码
[ 本帖最后由 随风 于 2010-6-10 22:11 编辑 ]
作者: 523066680 时间: 2010-6-10 22:39 标题: 回复 3楼 的帖子
理解了老半天
原来如此,我用的是整行替换。
而你用的是针对一行的各个小节,逐个替换。(避免了不同元素镶套替换)
这样替换不会出错,因为, 这段代码本来就把各个替换的元素用空格独立开来了。
就用 set xxx原来A=变成B
和代码一样,不会有冲突。 最后逐个节点搞定~
太完美了 ~~~~(>_<)~~~~
我说C 语言编译器怎么读的,
b="for"而
f ="," 其实是我对整行替换多次,导致镶套替换。
……
感谢随风的代码,让我茅塞顿开。
[ 本帖最后由 523066680 于 2010-6-10 22:47 编辑 ]
作者: sgaizxt001 时间: 2010-6-11 00:02
这个C代码有那么多的{}对啊
作者: terse 时间: 2010-6-11 03:50
一个文本里处理 学习了
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2* " %%a in (c.txt) do (
- if "%%a" lss "+" (
- if defined #%%b (
- set "%%b=%%b"&set "@%%b=%%c"
- ) else set "#%%b=%%c")else (
- for %%i in (%%a %%b %%c) do if "!%%i!" equ "%%i" (
- set "str=!str! !@%%i!"
- ) else set "str=!str! !#%%i!"
- echo!str!&set str=
- )
- )
- pause
复制代码
作者: Seter 时间: 2010-6-11 16:45
LZ.. 大部分C(非VC)的编译器都是不用include基本库的...只有C++才需要...
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |