我自定义一个函数,以CString类作为参数,例如lookfor(CString test)。在函数内部我对CString类的Find函数使用如下判断
if (str.Find(test)!=-1)
{
}
else
{
}不管str字符串是否包含test字串,结果都是执行else内的代码。是不是Find函数只能接受常数字符串而不能接受变量字符串?

解决方案 »

  1.   

    >>不管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".
      

  2.   

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

  3.   

    应该不会有问题,lz可以看看test的值正不正确。
    MSDN中函数的原型:int Find( TCHAR ch ) const;
    int Find( LPCTSTR lpszSub ) const;所以与常量 变量无关!
      

  4.   

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

  5.   

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

  6.   

    我把代码贴出来,由于没有缩进,可能读起来不方便
    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的变量