19,468
社区成员
发帖
与我相关
我的任务
分享
#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,测试过了几组数据,可以的.
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);
}