VC++获得CString 以逗号分割的子串数量问题
我想获得CString的子串,比如AreaItem=AREA1,AREA2,AREA3,AREA4,AREA5,AREA6,AREA11,AREA12我如何获得AREA1...
我想获得CString的子串,比如AreaItem=AREA1,AREA2,AREA3,AREA4,AREA5,AREA6,AREA11,AREA12
我如何获得AREA1,AREA2,AREA3,AREA4,AREA5,AREA6,AREA11,AREA12的数量
我写的代码
int CConfigure::GetAreaItem()
{
int ItemCount=0;
CString Item;
Item=GetStrValue(_T("AreaItem"));
while(Item.Find(',') != -1)
{
if(Item.Find(','))
ItemCount++;
}
return ItemCount;
}
这样会是程序卡死,不知道为什么,求高手修改 展开
我如何获得AREA1,AREA2,AREA3,AREA4,AREA5,AREA6,AREA11,AREA12的数量
我写的代码
int CConfigure::GetAreaItem()
{
int ItemCount=0;
CString Item;
Item=GetStrValue(_T("AreaItem"));
while(Item.Find(',') != -1)
{
if(Item.Find(','))
ItemCount++;
}
return ItemCount;
}
这样会是程序卡死,不知道为什么,求高手修改 展开
2个回答
展开全部
void CCConfigureDlg::OnGetAreaItem()
{
// TODO: Add your control notification handler code here
int Pos,ItemCount=0;
CString AreaItem="AREA1,AREA2,AREA3,AREA4,AREA5,AREA6,AREA11,AREA12";
while((Pos = AreaItem.Find(',')) != -1)
{
AreaItem = AreaItem.Right(AreaItem.GetLength()-Pos-1);
AfxMessageBox(AreaItem);
ItemCount++;
}
SetDlgItemInt(IDC_EDIT1,ItemCount+1,TRUE);
UpdateData(FALSE);
}
展开全部
Item.Find 每次都是从起始位置开始查找的
所以你每次都是从起始位置查找,每次都找到第一个位置
所以循环死了,就是差你应该下次就从本次查找到的位置下一个位置开始查找才可以
否则,偷懒的方法,你可以 String.Replace(",", "") 把逗号替换为空,替换前的字符长度减去替换后的字符长度,就是被替换掉的逗号的个数
沧海雄风2009 的方法也可以
C++可以取地址,你 循环 char theChar = Item.GetChar(i); if (',' == theChar) count++;也可以,这样还不会涉及到内存重分配,否则Item的重新赋值都会重新分配内存
所以你每次都是从起始位置查找,每次都找到第一个位置
所以循环死了,就是差你应该下次就从本次查找到的位置下一个位置开始查找才可以
否则,偷懒的方法,你可以 String.Replace(",", "") 把逗号替换为空,替换前的字符长度减去替换后的字符长度,就是被替换掉的逗号的个数
沧海雄风2009 的方法也可以
C++可以取地址,你 循环 char theChar = Item.GetChar(i); if (',' == theChar) count++;也可以,这样还不会涉及到内存重分配,否则Item的重新赋值都会重新分配内存
追问
你的答案也不错,但是日后我可能需要字符串的显示,就采纳楼下的答案了,非常感谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询