请教一个:数组 组合的问题

ilovejanx 2010-04-30 10:06:52
大家好!碰到一个问题,描述如下:

我有几个数组,暂时以CStringArray为例,大小不一
CStringArray sArray1,sArray2,sArray3,sNewArray;

我想实现,在数组sArray1,sArray2,sArray3里面按顺序每个数组依次循环取2个元素个加入新数组sNewArray

比如
sArray1={"1","2","3,"4","5"}
sArray2={"6","7","8,"9","10","20"}
sArray3={"11","12","13,"14","15","16","17"}

sNewArray={"1","2","6","7","11","12","3","4","8","9","13","14","5","10","20","15","16","17"}

怎么实现。。?谢谢
...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
enjoy_lwy 2010-07-05
  • 打赏
  • 举报
回复
长见识了
sueiyuan_401 2010-05-02
  • 打赏
  • 举报
回复
一楼正解
ilovejanx 2010-05-02
  • 打赏
  • 举报
回复
谢谢大家。尤其zxdyu2009 finder_zhang
finder_zhang 2010-05-02
  • 打赏
  • 举报
回复
不用谢,有分就行了.
finder_zhang 2010-05-01
  • 打赏
  • 举报
回复

#include <afxcoll.h>

void CMFCtestDlg::OnButton5()
{
// TODO: Add your control notification handler code here
int nCount = 5;
int nTickCount = 2;
CString strTemp;
CStringArray *strArray = new CStringArray[nCount];
CStringArray sNewArray;
int i,j,k;
for (i=0;i<nCount;i++){ //对nCount个数组不等长地初始化一下
for (j=0;j<i+2;j++){
strTemp.Format("%d",j);
strArray[i].Add(strTemp);
}
}
for (i=0;i<nCount;i++){ //输出原始数据
for (j=0;j<strArray[i].GetSize();j++){
TRACE("%s ",strArray[i][j]);
}
TRACE("\n");
}

BOOL bUnfinish = 0;
k = 0; //K记录的是现在加到第几个
do{
bUnfinish = 0; //标志位先置0,只要其中有某一数组未加完,标志位就置1,继续循环
for(i=0;i<nCount;i++){
for (j=k;j<k + nTickCount;j++){
if(j+1<=strArray[i].GetSize()){ //j在范围内,则添加
sNewArray.Add(strArray[i][j]);
}
}
if (k + nTickCount<strArray[i].GetSize()){//后面还有元素,则再循环
bUnfinish = 1;
}
}
k += nTickCount;
} while (bUnfinish);

for (i=0;i<sNewArray.GetSize();i++){ //输出测试
TRACE("%s ",sNewArray[i]);
if (i && i%16==0){
TRACE("\n");
}
}
}

不知道楼主是不是要这样,参考上面的代码,改成可以自己定nCount 与 nTickCount,测试过了几组数据,可以的.
finder_zhang 2010-05-01
  • 打赏
  • 举报
回复
1楼那个做法不错啊,楼主,你要的是,前面要处理的数组数,可能不止3个,而是N个,全部是NEW出来放在一组中的.然后隔2个的,也可能是隔很多个,是这样的吗?
ilovejanx 2010-05-01
  • 打赏
  • 举报
回复
谢谢zxdyu2009。。。。。。

不过我想的是一个通用的解决思路。
我尝试过。。失败了。。

CStringArray 数 不确定。
CStringArray *strArray = new CStringArray[nCount];
int nTickCount = 0;//即上面的2,即 按顺序每个数组依次循环取nTickCount个元素个加入新数组sNewArray

尤其在处理取数据的时候需要判断,这个有点头疼。。。

能有其他的思路吗?
尹成 2010-05-01
  • 打赏
  • 举报
回复
像1楼那样做了,应该完全可以的啊,不知道楼主你怎么情况什么样的
zxdyu2009 2010-04-30
  • 打赏
  • 举报
回复

CStringArray strArray1;// = {"1","2","3,"4","5"}
int iItem = 0;
strArray1.InsertAt(iItem++,"1");
strArray1.InsertAt(iItem++,"2");
strArray1.InsertAt(iItem++,"3");
strArray1.InsertAt(iItem++,"4");
strArray1.InsertAt(iItem++,"5");

CStringArray strArray2;// = {"6","7","8,"9","10","20"}
iItem = 0;
strArray2.InsertAt(iItem++,"6");
strArray2.InsertAt(iItem++,"7");
strArray2.InsertAt(iItem++,"8");
strArray2.InsertAt(iItem++,"9");
strArray2.InsertAt(iItem++,"10");
strArray2.InsertAt(iItem++,"20");

CStringArray strArray3;// = {"11","12","13,"14","15","16","17"}
iItem = 0;
strArray3.InsertAt(iItem++,"11");
strArray3.InsertAt(iItem++,"12");
strArray3.InsertAt(iItem++,"13");
strArray3.InsertAt(iItem++,"14");
strArray3.InsertAt(iItem++,"15");
strArray3.InsertAt(iItem++,"16");
strArray3.InsertAt(iItem++,"17");


CStringArray strNewArray;//={"1","2","6","7","11","12","3","4","8","9","13","14","5","10","20","15","16","17"};

int iSize1 = strArray1.GetSize();
int iSize2 = strArray2.GetSize();
int iSize3 = strArray3.GetSize();

int iMax = (iSize1 > iSize2)?((iSize1 > iSize3)?iSize1:iSize3):((iSize2 > iSize3)?iSize2:iSize3);
int iIndex = 0;
for ( int i = 0; i < iMax; i = i + 2 )
{
//CString str1_1,str1_2,str2_1,str2_2,str3_1,str3_2;
if ( (i < iSize1-1) && ((i+1) < iMax) )
{
strNewArray.InsertAt(iIndex++,strArray1.GetAt(i));
strNewArray.InsertAt(iIndex++,strArray1.GetAt(i+1));
}
else if( i < iSize1 )
{
strNewArray.InsertAt(iIndex++,strArray1.GetAt(i));
}

if ( (i < iSize2-1) && ((i+1) < iMax) )
{
strNewArray.InsertAt(iIndex++,strArray2.GetAt(i));
strNewArray.InsertAt(iIndex++,strArray2.GetAt(i+1));
}
else if( i < iSize2 )
{
strNewArray.InsertAt(iIndex++,strArray2.GetAt(i));
}

if ( (i < iSize3-1) && ((i+1) < iMax) )
{
strNewArray.InsertAt(iIndex++,strArray3.GetAt(i));
strNewArray.InsertAt(iIndex++,strArray3.GetAt(i+1));
}
else if( i < iSize3 )
{
strNewArray.InsertAt(iIndex++,strArray3.GetAt(i));
}
}
for ( i = 0; i < strNewArray.GetSize(); i++)
{
CString str = strNewArray.GetAt(i);
str += "\n";
TRACE(str);
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧