Problem 1078 --妹妹与C语言

1078: 妹妹与C语言

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 17  Solved: 5
[Submit][Status][Web Board][Creator:]

Description

作为这个城市最精通编程的妹妹95533号,需要负责向其他妹妹讲述C语言的各种技巧,今天讲授的主题是宏替换。



10086:C语言的宏替换是不是就像记事本里的全选替换一样简单呢?
95533:类似,但是不完全一样。例如,我们在程序中写了一行#define A B,那么其实并不是把所有的A都替换为B。
10086:是吗?
95533:给你个例子体会一下!
#define A B

int main() {
    int A = 123;
    int AA = 456;
    return 0;
}
95533:在这个例子中可以发现只有第一个A被替换了,下面的AA是不会被替换的。
10086:我明白了,还有其他情况吗?
95533:想一想是不是字符串中的内容也不替换呢?
10086:是的哇,我完全明白了。
95533:再给你一个复杂一点的例子感受一下
#define A B
#define B C
#define C 0

int main() {
    C; A;
    const char* s = "AABBCCBBCCDDAA";
    return 0;
}
10086:我看懂了,这段代码替换完成后应该是下面这个样子的。
int main() {
    0; 0;
    const char* s = "AABBCCBBCCDDAA";
    return 0;
}

Input

输入一段手打的C程序,预处理提示符只有#define,并且没有宏函数需要处理。

请注意#define可以出现在程序中的任何位置,所有#define后面一定跟着两个空格分隔的串L R,

其中L必定为一个合法的C语言ID(字母数字下划线,数字不放在开头),

R可能下面几种情况之一:

- C语言数字(1 1.11 0.23 1e20,注意数字不包括任何运算符)

- 字符串("123abc")

- ID(同L),

- c语言运算符,界符,关键字

- 单个字符(+-*/&^%[]{}.)

请注意这里做了一些简化,真实语法更加复杂。

#define总长度不超过256,一定是独立的行,只对该#define行下面的非预处理部分源代码有效。

输入保证是合法的,可以通过编译的C程序,#define不会成环(虽然在有些情况下C语言允许这种操作),即不会出现#define A B #define B A,也不会出现#define A A。每行的长度不超过1024个字符。当然,妹妹也从来都不写注释,喵喵喵~

Output

输出宏替换完成后的结果,移除程序中所有的#define开始的行和空白{ ,\n,\t,\r}后输出(也就是说最终答案中不能出现任何空白字符)。

Sample Input

#define A B
#define B C
#define C 0
int main() {
    C; A;
    const char* s = "AABBCCBBCCDDAA";
    return 0;
}

Sample Output

intmain(){0;0;constchar*s="AABBCCBBCCDDAA";return0;}

HINT

Source

[Submit][Status]