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;
}
展开
 我来答
never715
2013-12-08 · TA获得超过942个赞
知道小有建树答主
回答量:1010
采纳率:84%
帮助的人:466万
展开全部
1、如果对于字符串中的数字没有特殊顺序要求的话,利用CString重载比较运算符的特性就可以直接对字符串进行排序。
2、排除第一点的话,可以将CString与提取出的数字做个关联,利用排序好的数字再将字符串排序。
但是不管是哪种情况,你这样在一个三重循环里面去频繁做些Delete和Insert等控件操作必然导致效率极度下降。所以最好先将所有的字符串排序完成之后,再一次性insert到listBox。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式