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;
}

这样会是程序卡死,不知道为什么,求高手修改
展开
 我来答
沧海雄风2009
2013-06-20 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2850万
展开全部


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);
}
wangpaishi
2013-06-20 · TA获得超过570个赞
知道小有建树答主
回答量:932
采纳率:52%
帮助的人:760万
展开全部
Item.Find 每次都是从起始位置开始查找的

所以你每次都是从起始位置查找,每次都找到第一个位置
所以循环死了,就是差你应该下次就从本次查找到的位置下一个位置开始查找才可以

否则,偷懒的方法,你可以 String.Replace(",", "") 把逗号替换为空,替换前的字符长度减去替换后的字符长度,就是被替换掉的逗号的个数

沧海雄风2009 的方法也可以

C++可以取地址,你 循环 char theChar = Item.GetChar(i); if (',' == theChar) count++;也可以,这样还不会涉及到内存重分配,否则Item的重新赋值都会重新分配内存
追问
你的答案也不错,但是日后我可能需要字符串的显示,就采纳楼下的答案了,非常感谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式