Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何检查CComBSTR是否以某个前缀开头?_String_Visual C++_Atl_Bstr - Fatal编程技术网

String 如何检查CComBSTR是否以某个前缀开头?

String 如何检查CComBSTR是否以某个前缀开头?,string,visual-c++,atl,bstr,String,Visual C++,Atl,Bstr,我遇到了一段代码,需要对给定的CComBSTR对象执行前缀检查(类似于Y.StartsWith(“X”))。C++对我来说有点陌生,我最大的担心是效率。我不需要以任何方式修改CComBSTR。我只想返回一个布尔值,它是否以X前缀开头 查看下面API中列出的运算符,它允许进行非常基本的比较,如==,>,将为您比较有限数量的起始字符: BOOL StartsWith(BSTR sValue, const WCHAR* pszSubValue) { if(!sValue) re

我遇到了一段代码,需要对给定的CComBSTR对象执行前缀检查(类似于
Y.StartsWith(“X”)
)。C++对我来说有点陌生,我最大的担心是效率。我不需要以任何方式修改CComBSTR。我只想返回一个布尔值,它是否以X前缀开头

查看下面API中列出的运算符,它允许进行非常基本的比较,如==,>,将为您比较有限数量的起始字符:

BOOL StartsWith(BSTR sValue, const WCHAR* pszSubValue)
{
    if(!sValue)
        return FALSE;
    return wcsncmp(sValue, pszSubValue, wcslen(pszSubValue)) == 0;
}
我在这里加入了后缀版本,并加入了Roman R答案的变体,允许使用空白前缀字符串


注意:这些没有经过很好的测试

谢谢!工作得很有魅力。是否有任何理由让您在WCar上使用C++中的所有其他字符类型?<代码> WCHAR */COD>直接与<代码> BSTR < /C> >兼容,并且可以提供两个参数作为<代码> WCS*<代码>函数。请注意,null
BSTR
仍然是有效值,但它不是
wcs*
函数的有效参数。
   BOOL StartsWith(BSTR sValue, BSTR prefix)
         {
         if (!prefix)
            return TRUE;
         auto prefixlen = wcslen(prefix);
         if (prefixlen == 0)
            return TRUE;
         if (!sValue)
            return FALSE;
         return wcsncmp(sValue, prefix, prefixlen) == 0;
         }

   BOOL EndsWith(BSTR sValue, BSTR suffix)
         {
         if (!suffix)
            return TRUE; // always true if suffix is blank or null
         auto suffixlen = wcslen(suffix);
         if (suffixlen == 0)
            return TRUE; // always true if suffix is blank or null
         if (!sValue)
            return FALSE;
         auto valuelen = wcslen(sValue);
         if (suffixlen > valuelen)
            return FALSE;
         auto skip = valuelen - suffixlen;
         return wcsncmp(sValue + skip, suffix, wcslen(suffix)) == 0;
         }