hur.cn - 华软网

 热门搜索

CString文字游戏

  作者:未知    来源:网络    更新时间:2011/9/29
比如: CString sdata=_T("9907,23:紫 单面 1匹  |23:紫 单面 1匹  |");
我要把字符串分开,得到"9907":
int n=sdata.Find(_T(","));
CString str1=sdata.Left(n);
再得到后面的:
int l=sdata.GetLength();
sdata=sdata.Right(l-n-1);//23:紫 单面 1匹  |23:紫 单面 1匹  |
得到"23":
n=sdata.Find(_T(":"));
CString str2=sdata.Left(n);//23
而现在我直接写成:sdata.Left(sdata.Find(_T(":"));//23
l=sdata.GetLength();
再直接写成:sdata.Right(l-sdata.Find(_T(":"))-1)//紫 单面 1匹  |23:紫 单面 1匹  |

这样写会不会出问题,我很多地方都图省力这样写了,结果是我的vs2010发疯了一样,3次调试2次来未响应。再重启动……
输出的结果倒是没问题的,就是发疯一样的死机。
有次出了个调试界面:

“System.AccessViolationException”类型的未经处理的异常出现在 PresentationCore.dll 中。

其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

以前写代码时,虽说偶尔死个几次我也忍了,我估计是win7 64可能有点影响,可现在没法活了啊,发疯一样的死啊~~
C++">
void check::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CString temp,str,str1,str2,str3;
CStringArray total;
dc.SetBkMode(TRANSPARENT);
int len,n,i;
int l,x;
int* a; 
bool r;
TEXTMETRIC lptm;

dc.GetTextMetrics(&lptm);
int h=lptm.tmHeight;
ClientToScreen(&rect);
CFinalSnipeDlg* dlg=(CFinalSnipeDlg*)AfxGetApp()->m_pMainWnd;

total.RemoveAll();
i=0;
r=true;

while(1)
{
len=sdata.GetLength();
n=sdata.Find(_T("|"));
temp=sdata.Left(n);
if(temp.Find(_T(","))==-1)
{
l=temp.GetLength();

str1=temp.Left(temp.Find(_T("面"))+1);//class
str2=temp.Right(l-temp.Find(_T("面"))-2);//rolls
for(int u=0;u<total.GetSize();u++)
{
if(str1==total[u])
{
str3.Format(_T("%d"),(_ttoi(total[u+1])+_ttoi(str2)));
total[u+1]=str3;
break;
}
else if(u==total.GetSize()-1)
{
total.Add(str1);
total.Add(str2);
break;
}
}

dc.TextOutW(85,30+h*i,temp.Left(temp.Find(_T(":"))));//model
a=dlg->findmodel(temp.Left(temp.Find(_T(":"))));
if(a[0]==0)
{
dc.SetTextColor(RGB(255,0,0));
dc.TextOutW(250,30+h*i,_T("库存无货,请检查是否型号输入错误。"));
dc.SetTextColor(RGB(0,0,0));
}
dc.TextOutW(150,30+h*i,temp.Right(l-temp.Find(_T(":"))-1));//unm
}
else
{
l=temp.GetLength();
x=temp.Find(_T(","));

str.Format(_T("%d"),i);
dc.TextOutW(15,30+h*i,str);//NO.
i++;

dc.TextOutW(15,30+h*i,temp.Left(x));//name
temp=temp.Right(l-x-1);

str1=temp.Left(temp.Find(_T("面"))+1);//class
str2=temp.Right(l-temp.Find(_T("面"))-2);//rolls
if(r==true)
{
total.Add(str1);
total.Add(str2);
}
if(r==false)
{
for(int u=0;u<total.GetSize();u++)
{
if(str1==total[u])
{
str3.Format(_T("%d"),(_ttoi(total[u+1])+_ttoi(str2)));
total[u+1]=str3;
break;
}
else if(u==total.GetSize()-1)
{
total.Add(str1);
total.Add(str2);
break;
}
}
}
r=false;

dc.TextOutW(85,30+h*i,temp.Left(temp.Find(_T(":"))));//model
a=dlg->findmodel(temp.Left(temp.Find(_T(":"))));
if(a[0]==0)
{
dc.SetTextColor(RGB(255,0,0));
dc.TextOutW(250,30+h*i,_T("库存无货,请检查是否型号输入错误。"));
dc.SetTextColor(RGB(0,0,0));
}
dc.TextOutW(150,30+h*i,temp.Right(l-temp.Find(_T(":"))-2-x));//num
}
i++;
sdata=sdata.Right(len-n-1);
if(sdata==_T(""))break;
}
dc.TextOutW(15,30+h*i,total[0]);
dc.TextOutW(95,30+h*i,total[1]);
}


---华软 网友回答---
可以利用CString::Tokenize();      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。