Chinaunix

标题: 字符串连接数字的宏定义 [打印本页]

作者: 迷離    时间: 2009-04-21 22:28
标题: 字符串连接数字的宏定义
假如我有int型变量  a1 a2 a3 a4 a5 a6 a7 a8 a9 a10

想实现
for(int i=1;i<=10;++i)
{
    //完成ai 赋值操作
}

求宏定义连接 字符串和数字

多谢各位了...
作者: 皇家救星    时间: 2009-04-21 22:31
宏是静态的,不是动态的
作者: OwnWaterloo    时间: 2009-04-21 23:25
标题: 回复 #1 迷離 的帖子
#include <iostream>
#include <boost/preprocessor/repetition/enum_params.hpp>

int main()
{
    using namespace std;

    int a0=0,a1=1,a2=2,a3=3,a4=4;
    int* pa[] = { BOOST_PP_ENUM_PARAMS(5,&a) };
    for (int i=0;i<sizeof(pa)/sizeof(pa[0]);++i)
        *pa[ i ] = *pa[ i ] + i;
   
    cout<<a0<<" "<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<endl;
    cin.get();
}


输出: 0 2 4 6 8
作者: 迷離    时间: 2009-04-21 23:29
标题: 回复 #3 OwnWaterloo 的帖子
多谢回复

你没理解我的问题
作者: OwnWaterloo    时间: 2009-04-21 23:33
标题: 回复 #4 迷離 的帖子
已经和你需要的功能很接近了吧?

这个for循环:
    for (int i=0;i<sizeof(pa)/sizeof(pa[0]);++i)
        *pa[ i ] = *pa[ i ] + i;

操作的就是:
int a0=0,a1=1,a2=2,a3=3,a4=4;

从输出就可以看出这点。


要完全达到你的目标 ……   我真想不出什么办法 ……
将a0, a1, ... an, 重构为 int a[n-1] 吧。。。
作者: bladmin    时间: 2009-04-22 00:11
标题: 回复 #1 迷離 的帖子
这个写的是不算太清楚!呵呵,没理解LZ的意思! :wink:
作者: xinglp    时间: 2009-04-22 00:55
只能一个一个的连,或者用数组
作者: langue    时间: 2009-04-22 05:09
#define CONCAT(mystring,mynumber) mystring#mynumber

这样?
作者: 皇家救星    时间: 2009-04-22 11:32
原帖由 OwnWaterloo 于 2009-4-21 23:25 发表
#include
#include

int main()
{
    using namespace std;

    int a0=0,a1=1,a2=2,a3=3,a4=4;
    int* pa[] = { BOOST_PP_ENUM_PARAMS(5,&a) };
    for (int i=0;i

这样都能编译通过 好诡异啊

突然冒出来一个&a
作者: OwnWaterloo    时间: 2009-04-22 14:59
原帖由 皇家救星 于 2009-4-22 11:32 发表
这样都能编译通过 好诡异啊


int main()
{
    using namespace std;

    int a0=0,a1=1,a2=2,a3=3,a4=4;
    int* pa[] = { &a0 , &a1 , &a2 , &a3 , &a4 };
    for (int i=0;i<sizeof(pa)/sizeof(pa[0]);++i)
        *pa[ i ] = *pa[ i ] + i;

    cout<<a0<<" "<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<endl;
    cin.get();
}

这是源代码预处理之后的结果。 显然是合法的C++代码嘛。
当然能编译通过。

我觉得这就是楼主的需求 ……
将a0, a1, a2, ... 这种设计, 转换到数组的设计。
楼主好像没看出来……

[ 本帖最后由 OwnWaterloo 于 2009-4-22 15:01 编辑 ]
作者: youshuang    时间: 2009-04-22 15:42
不知道你是不是想要这样的:


  1. #include <iostream>
  2. #include<sstream>
  3. #include <string>

  4. using namespace std;

  5. int main()
  6. {
  7.     int a[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 };
  8.     stringstream sString;
  9.     for ( int i = 0; i < sizeof( a ) / sizeof( int ); i++ )
  10.     {   
  11.         sString << a[ i ];
  12.     }   
  13.     cout << sString.str() << endl;
  14.     return 0;
  15. }
复制代码

作者: gz80    时间: 2009-04-22 17:17
如果那些变量是一起声明的,那么在它们在函数栈空间里面一定也是连续的,而且栈是由高往低生长的。

#define VARS_SET(var_head, var_count, Value)  {for(int i = 0; i < var_count; i++) *(&var_head - i) = Value;}

  int a1,a2,a3,a4,a5;
  VARS_SET(a1, 5, 100);


作者: langue    时间: 2009-04-22 17:18
其实我们都达到 LZ 的要求了。:wink:




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2