C语言编译时有没有办法自动合并字符串
我想实现这个功能,举个例子:
执行函数
Display(1,1,"今天好天气");//显示今天好天气
Display(1,1,"明天好天气");//显示明天好天气
Display(1,1,"今天好好气");//显示今天好好气
Display(1,1,"明天好好气");//显示明天好好气
还有很多情况.等等..
不想这样定义
#define aa"今天好天气"
//#define aa"明天好天气"
Display(1,1,aa); //更改aa的定义可以实现整个字符串不同显示
想用一种定义方法实现
把字符串中的,"今天好天气",这个字符串拆分出来, 变成"今天"+"好天气"
伪代码如下:
#define A1 "今天"
#define A2 "好天气"
Display(1,1,A1+A2); //显示今天好天气,这里在编译时编译器已经帮我完成合并了
如改为
#define A1 "明"
#define A2 "天好天气"
Display(1,1,A1+A2); //显示明天好天气,这里在编译时编译器已经帮我完成合并了
这样我改变A1,A2的定义,编译器编译时可以方便帮我定义好更改显示
试过用连接符,但不成功
请教一下大家,在C语言中有没有办法可以实现这个功能。如果有,如何实现? Display(1, 1, A1 A2)试试
这样应该是可以的 看这个,里面有讲“宏中"#"和"##"的用法”
C语言常用宏定义技巧
http://www.amobbs.com/forum.php?mod=viewthread&tid=591181&highlight=%E5%AE%8F%E5%AE%9A%E4%B9%89 本帖最后由 chinabn 于 2012-9-4 11:39 编辑
楼上正解
或者
采用printf格式化
或字符串函数
我建议2楼的方法 谢谢楼上各位,用2楼的方法可以实现.. 普通的解决办法: 写两个display语句, 控制好位置
文艺的解决办法: 用宏定义的#或##拼接
那啥的解决办法: 用strcat函数 用##的方法没有成功。
请大侠示范一下,谢谢!
himm007 发表于 2012-9-4 12:24 static/image/common/back.gif
用##的方法没有成功。
请大侠示范一下,谢谢!
#define CONS(a,b) (a##b)
#define K "你好"
#define J "!"
Display(CONS(K,J)); 使用#和##是不是都不能用变量?
能的话怎么使用?
求大侠们解答。 Tliang 发表于 2012-9-5 11:27 static/image/common/back.gif
#define CONS(a,b) (a##b)
#define K "你好"
#include <stdio.h>
#define A "111"
#define B "222"
#define CONS(a,b) (a##b)
int main(void) {
printf("%s\n", CONS(A,B));
return 0;
}
Ubuntugcc 4.6.3 编译出错
test.c: In function 'main':
test.c:9:1: error: 'AB' undeclared (first use in this function)
test.c:9:1: note: each undeclared identifier is reported only once for each function it appears in
himm007 发表于 2012-9-5 11:58 static/image/common/back.gif
#include
#define A "111"
我在KEIL里面用的没问题 himm007 发表于 2012-9-5 11:58 static/image/common/back.gif
#include
#define A "111"
我没用宏定义的试的,直接
CONS("123","123")这样可以。。。
用了宏定义后
#define J "123"
#define K "123"
然后
CONS(J,K)
这样也不行。。
他将J和K结合在一起了。变成JK了。。。 himm007 发表于 2012-9-5 11:58 static/image/common/back.gif
#include
#define A "111"
#define _Str(s) #s
#define Str(s) _Str(s)
#define i 12334
#define J 123
#define K 321
#define _CONS(a,b) a##b
#define CONS(a,b) _CONS(a,b)
Display(Str(CONS(J,K)), 0, 0, 0);
通过。。
不过不能用变量。。 Tliang 发表于 2012-9-5 14:16 static/image/common/back.gif
#define _Str(s) #s
#define Str(s) _Str(s)
不错,但是有点复杂了,
页:
[1]