PICTURE 发表于 2012-9-4 11:08:54

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语言中有没有办法可以实现这个功能。如果有,如何实现?

百果 发表于 2012-9-4 11:10:52

Display(1, 1, A1 A2)试试
这样应该是可以的

lcw_swust 发表于 2012-9-4 11:32:28

看这个,里面有讲“宏中"#"和"##"的用法”

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:33:38

本帖最后由 chinabn 于 2012-9-4 11:39 编辑

楼上正解
或者
采用printf格式化
或字符串函数

我建议2楼的方法

PICTURE 发表于 2012-9-4 11:55:01

谢谢楼上各位,用2楼的方法可以实现..

yurinacn 发表于 2012-9-4 12:06:12

普通的解决办法: 写两个display语句, 控制好位置
文艺的解决办法: 用宏定义的#或##拼接
那啥的解决办法: 用strcat函数

himm007 发表于 2012-9-4 12:24:46

用##的方法没有成功。
请大侠示范一下,谢谢!

Tliang 发表于 2012-9-5 11:27:23

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:30:12

使用#和##是不是都不能用变量?
能的话怎么使用?
求大侠们解答。

himm007 发表于 2012-9-5 11:58:24

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

Tliang 发表于 2012-9-5 13:33:02

himm007 发表于 2012-9-5 11:58 static/image/common/back.gif
#include

#define A "111"


我在KEIL里面用的没问题

Tliang 发表于 2012-9-5 13:38:47

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了。。。

Tliang 发表于 2012-9-5 14:16:35

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);

通过。。
不过不能用变量。。

himm007 发表于 2012-9-5 15:17:41

Tliang 发表于 2012-9-5 14:16 static/image/common/back.gif
#define _Str(s) #s

#define Str(s) _Str(s)


不错,但是有点复杂了,
页: [1]
查看完整版本: C语言编译时有没有办法自动合并字符串