将有法令的变量名表示的内容赋值给一个数组,怎样让程序把通过字符串操作合成的变量名当做变量名,而不是普通字符串
将有规律的变量名表示的内容赋值给一个数组,怎样让程序把通过字符串操作合成的变量名当做变量名,而不是普通字符串
假如我有一系列变量,假如分别表示第n分钟的速度v,名字都很有规律,分别是v0,v1,v2,v3……并且均已赋值,如果我想把他们逐个赋值给数组b[],该怎么弄呢?
我可不想一个个赋值,
b[0]=v0;
b[1]=v1;
b[2]=v2;
………………………………………………
难道有一万个变量名,要写一万行赋值代码,OMG!
我想的是利用for循环,把v0,v1,v2,v3……变量名通过字符串操作(把v和循环量i合并为一个字符串)拼出来,然后在循环中赋值给数组b[]
类似下面:
for(i=0;i<……;i++)
合并v与i,得到vi
b[i]=vi
当然,这只是想当然,关键是怎么让程序碰到vi时,将它当做前面表示数字的变量,而不是单单一个字符串呢?
------解决方案--------------------
你要这么想,你那v1---v10000,为什么他不是数组呢?
而且,如果这个已经是事实了,说明你的程序逻辑就是很复杂,那也没有办法,也要写1w行赋值啊。
另外有小技巧来搞定v1-v10000的赋值,可以。
但是10000太大,模板是用不上了。。。没法递归编译10000次。。。
或者让v1-v10000的内存布局有点规律,也好啊。。。
------解决方案--------------------
我个人认为你根本没有办法实现这个需求,如果你的不让我们问为什么的事情不可改变的话,你只能一个变量一个变量赋值。即使2F说的模板和递归,也是无法解决即使只有2个变量名的情况
------解决方案--------------------
映射到数组方法:不能用向导
1. 定义一个数组作为成员,注意,必须不再//{{AFX_DATA(ClassName)和//}}AFX_DATA之间定义
int arr[3];
2. 在构造函数中给他们初始化
memset(&arr[0],0,sizeof(arr));
3. 修改DoDataExchange如下
你只需要确保两点a) 需要映射到这个数组的控件的id必须连续(否则你无法用循环)
b) 他们不在我上面说的那两个注释中间
假如我有一系列变量,假如分别表示第n分钟的速度v,名字都很有规律,分别是v0,v1,v2,v3……并且均已赋值,如果我想把他们逐个赋值给数组b[],该怎么弄呢?
我可不想一个个赋值,
b[0]=v0;
b[1]=v1;
b[2]=v2;
………………………………………………
难道有一万个变量名,要写一万行赋值代码,OMG!
我想的是利用for循环,把v0,v1,v2,v3……变量名通过字符串操作(把v和循环量i合并为一个字符串)拼出来,然后在循环中赋值给数组b[]
类似下面:
for(i=0;i<……;i++)
合并v与i,得到vi
b[i]=vi
当然,这只是想当然,关键是怎么让程序碰到vi时,将它当做前面表示数字的变量,而不是单单一个字符串呢?
------解决方案--------------------
你要这么想,你那v1---v10000,为什么他不是数组呢?
而且,如果这个已经是事实了,说明你的程序逻辑就是很复杂,那也没有办法,也要写1w行赋值啊。
另外有小技巧来搞定v1-v10000的赋值,可以。
但是10000太大,模板是用不上了。。。没法递归编译10000次。。。
或者让v1-v10000的内存布局有点规律,也好啊。。。
------解决方案--------------------
我个人认为你根本没有办法实现这个需求,如果你的不让我们问为什么的事情不可改变的话,你只能一个变量一个变量赋值。即使2F说的模板和递归,也是无法解决即使只有2个变量名的情况
------解决方案--------------------
映射到数组方法:不能用向导
1. 定义一个数组作为成员,注意,必须不再//{{AFX_DATA(ClassName)和//}}AFX_DATA之间定义
int arr[3];
2. 在构造函数中给他们初始化
memset(&arr[0],0,sizeof(arr));
3. 修改DoDataExchange如下
你只需要确保两点a) 需要映射到这个数组的控件的id必须连续(否则你无法用循环)
b) 他们不在我上面说的那两个注释中间
- C/C++ code
void CTest3Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); int i; for(i=0; i < 3; i++) { DDX_Text(pDX, IDC_EDIT1+i, arr[i]); }; //{{AFX_DATA_MAP(CTest3Dlg) //}}AFX_DATA_MAP }