[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [练习]批处理还原这个难以理解的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 编辑 ]
1

评分人数

    • neorobin: 非常感谢, 强烈要求分享 523066680 常去的好 ...PB + 10

为了方便处理,可以分为两个文本读取。

举出一个我头疼的问题吧:
b 替换为 for
而后面有 f 替换为 ","
如何让一个字符不被再次替换呢?  我刚刚想用vbs 吧替换过的字符改为数值来避免……
写的不咋样,也没写完

TOP

a.txt 内容为 #define 开头的行
b.txt 内容为 剩余的行
未排版
:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (M A G I C) do set .D%%a=%%a
  3. for /f "tokens=1,2* delims= " %%a in (a.txt) do (
  4.    set #%%b=%%c
  5.    if "!.D%%b!"=="%%b" set .%%b=%%c
  6. )
  7. for /f "delims=" %%i in (b.txt) do (
  8.    set "str="
  9.    for %%j in (%%i) do (
  10.    if "!.D%%j!"=="%%j" (set str=!str! !.%%j!) else (
  11.          set str=!str! !#%%j!
  12.        )
  13.     )
  14.     echo !str!
  15. )
  16. pause
复制代码

[ 本帖最后由 随风 于 2010-6-10 22:11 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

回复 3楼 的帖子

理解了老半天
原来如此,我用的是整行替换。
而你用的是针对一行的各个小节,逐个替换。(避免了不同元素镶套替换)

这样替换不会出错,因为, 这段代码本来就把各个替换的元素用空格独立开来了。

就用   set xxx原来A=变成B
和代码一样,不会有冲突。 最后逐个节点搞定~

太完美了 ~~~~(>_<)~~~~

我说C 语言编译器怎么读的,
b="for"而
f =","    其实是我对整行替换多次,导致镶套替换。

……

感谢随风的代码,让我茅塞顿开。

[ 本帖最后由 523066680 于 2010-6-10 22:47 编辑 ]

TOP

这个C代码有那么多的{}对啊
努力学习,努力挣分

TOP

一个文本里处理  学习了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2* " %%a in (c.txt) do (
  3.     if "%%a" lss "+" (
  4.        if defined #%%b (
  5.        set "%%b=%%b"&set "@%%b=%%c"
  6.      ) else set "#%%b=%%c")else (
  7.        for %%i in (%%a %%b %%c) do if "!%%i!" equ "%%i" (
  8.            set "str=!str! !@%%i!"
  9.          ) else set "str=!str! !#%%i!"
  10.            echo!str!&set str=
  11.      )
  12.   )
  13. pause
复制代码

TOP

LZ..   大部分C(非VC)的编译器都是不用include基本库的...只有C++才需要...
OrzDEF

TOP

返回列表