MFC ListBox排序问题
我将一个文本的内容导入到了LISTBOX中,我想在ListBox中按照我的要求,对其中内容进行一次排序,比如来一次冒泡排序。但是我导入的是一行行字符串,每个字符串中都有一...
我将一个文本的内容导入到了LISTBOX中,
我想在ListBox中按照我的要求,对其中内容进行一次排序,比如来一次冒泡排序。
但是我导入的是一行行字符串,每个字符串中都有一个数字。
我做到了将每一行中数字取出来保存在一个动态数组里,进行一次冒泡排序。
现在我要做的是:
让每一行的字符串根据自己其中的数字排序也进行一次排序,虽然可以实现。
但是当字符串较长,且条目较多时,反应好慢!
有没有朋友帮我想想还有没有更好的方法,谢谢了。
以下是实现代码:
void COptimizeDlg::OptimizeForStation(void)
{
CHListBox* plb=(CHListBox*)GetParent()->GetDlgItem(IDC_LISTBOX);
int nLineCount=plb->GetCount();
CString szTempItem,szItemBuffer;
CString szStation;
int nTemp=0;
int *pStation=new int[nLineCount-1];
for(int i=0;i!=nLineCount-1;++i)
{
plb->GetText(i,szTempItem);
if(szTempItem.GetLength()<50)
{
AfxMessageBox(_T("程序内容错误!"));
}
else
{
size_t pos=szTempItem.FindOneOf(_T("Z"));
if(szTempItem.GetLength()>95)//******处理AV131/RL132程序
{
szTempItem.Delete(0,pos+4);//AV131/RL132字符数为101 AVK3字符数为76
}
else//*******************************处理AVK3程序
{
szTempItem.Delete(0,pos+1);
}
szStation=szTempItem.Left(3);
pStation[i]=_ttoi(szStation);
}
}
//************************************************************************
for(int j=1;j!=nLineCount-1;++j)
{
for(int k=0;k!=(nLineCount-2)-j;++k)
{
if(pStation[k]>pStation[k+1])
{
nTemp=pStation[k];
pStation[k]=pStation[k+1];
pStation[k+1]=nTemp;
plb->GetText(k,szItemBuffer);
szTempItem=szItemBuffer;
plb->GetText(k+1,szItemBuffer);
plb->DeleteString(k);
plb->InsertString(k,szItemBuffer);
plb->DeleteString(k+1);
plb->InsertString(k+1,szTempItem);
}
}
}
delete []pStation;
} 展开
我想在ListBox中按照我的要求,对其中内容进行一次排序,比如来一次冒泡排序。
但是我导入的是一行行字符串,每个字符串中都有一个数字。
我做到了将每一行中数字取出来保存在一个动态数组里,进行一次冒泡排序。
现在我要做的是:
让每一行的字符串根据自己其中的数字排序也进行一次排序,虽然可以实现。
但是当字符串较长,且条目较多时,反应好慢!
有没有朋友帮我想想还有没有更好的方法,谢谢了。
以下是实现代码:
void COptimizeDlg::OptimizeForStation(void)
{
CHListBox* plb=(CHListBox*)GetParent()->GetDlgItem(IDC_LISTBOX);
int nLineCount=plb->GetCount();
CString szTempItem,szItemBuffer;
CString szStation;
int nTemp=0;
int *pStation=new int[nLineCount-1];
for(int i=0;i!=nLineCount-1;++i)
{
plb->GetText(i,szTempItem);
if(szTempItem.GetLength()<50)
{
AfxMessageBox(_T("程序内容错误!"));
}
else
{
size_t pos=szTempItem.FindOneOf(_T("Z"));
if(szTempItem.GetLength()>95)//******处理AV131/RL132程序
{
szTempItem.Delete(0,pos+4);//AV131/RL132字符数为101 AVK3字符数为76
}
else//*******************************处理AVK3程序
{
szTempItem.Delete(0,pos+1);
}
szStation=szTempItem.Left(3);
pStation[i]=_ttoi(szStation);
}
}
//************************************************************************
for(int j=1;j!=nLineCount-1;++j)
{
for(int k=0;k!=(nLineCount-2)-j;++k)
{
if(pStation[k]>pStation[k+1])
{
nTemp=pStation[k];
pStation[k]=pStation[k+1];
pStation[k+1]=nTemp;
plb->GetText(k,szItemBuffer);
szTempItem=szItemBuffer;
plb->GetText(k+1,szItemBuffer);
plb->DeleteString(k);
plb->InsertString(k,szItemBuffer);
plb->DeleteString(k+1);
plb->InsertString(k+1,szTempItem);
}
}
}
delete []pStation;
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询