+ -
当前位置:首页 → 问答吧 → CString类的Find()函数参数问题

CString类的Find()函数参数问题

时间:2011-11-26

来源:互联网

我自定义一个函数,以CString类作为参数,例如lookfor(CString test)。在函数内部我对CString类的Find函数使用如下判断
if (str.Find(test)!=-1)
{
}
else
{
}

不管str字符串是否包含test字串,结果都是执行else内的代码。是不是Find函数只能接受常数字符串而不能接受变量字符串?

作者: shenxj1980   发布时间: 2011-11-26

>>不管str字符串是否包含test字串,结果都是执行else内的代码。是不是Find函数只能接受常数字符串而不能接受变量字符串?
常量串和变量都可以的,不知是怎么实现的?
函数定义:
void lookfor(CString test)
{
CString cs =_T("test");

if (cs.Find(test)!=-1)
{
AfxMessageBox(_T("ok"));
}
else
{
AfxMessageBox(_T("nook"));
}

}
调用

void CMFCDialogDlg::OnButton1() 
{

CString cs="test";

lookfor(cs);

}

都会打出"ok".

作者: gameslq   发布时间: 2011-11-26

帮楼主上机测试,应该都可以啊,楼主查下lookfor函数接收到的test参数是否正确赋值。
二楼示例正确。

作者: fight_in_dl   发布时间: 2011-11-26

应该不会有问题,lz可以看看test的值正不正确。
MSDN中函数的原型:

C/C++ code
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;


所以与常量 变量无关!

作者: chenjintaoxp   发布时间: 2011-11-26

lookfor(CString test)函数中的test是从对话框的编辑控件中提取的,而str.Find()中的str是从某个文件中提取的字段。相当于我建了一个类,里面有个CString类的属性str,然后我从编辑框中输入字符,在由类生成的document中提取他的属性str的值,如果属性str中包括编辑框中的字符就执行if中的操作。现在的问题是我明明知道str类中包括编辑框的字符,但是Find()的结果总是返回-1.

作者: shenxj1980   发布时间: 2011-11-26

框中的值我通过另外一个编辑控件进行跟踪了,显示的结果是一样的,也使用getlength()函数返回test的长度或者取值,跟原始编辑框的内容一样。属性str我也通过编辑框跟踪了没问题,所以我就不知道为什么总是返回-1了。

作者: shenxj1980   发布时间: 2011-11-26

我把代码贴出来,由于没有缩进,可能读起来不方便
void CWenjianduquView::SetDataPermission(CString data)
{
POSITION pos;
CString attribute;
CGangCaiData* gangcaidata;
pos=GetDocument()->m_gangcaidatalist.GetHeadPosition();
gangcaidata=GetDocument()->m_gangcaidatalist.GetAt(pos);
attribute=gangcaidata->GetBeiZhu();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetPinMing();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetCaiZhi();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetGuiGe();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetGangChang();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
while (pos!=NULL)
{
gangcaidata=GetDocument()->m_gangcaidatalist.GetNext(pos);
attribute=gangcaidata->GetBeiZhu();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetPinMing();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetCaiZhi();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetGuiGe();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
attribute=gangcaidata->GetGangChang();
if (attribute.Find(data)!=-1)
gangcaidata->SetPermission(TRUE);
else
gangcaidata->SetPermission(FALSE);
}
}

下面是对编辑框内容动态改变的处理代码
void CWenjianduquView::OnChangeCaizhi() 
{
CString str;
m_caizhi.GetWindowText(str);
SetDataPermission(str);
CtreeCtrlShow();
}
m_caizhi是一个CEdit的变量

作者: shenxj1980   发布时间: 2011-11-26