先来看个例子:
CString str[2] = { _T("12f"),_T("5a9") };
if (str[0] == str[0].SpanExcluding(_T("nice")))
{
TRACE(_T("SpanExcluding 返回true:12f 所有字符都不在nice中 \n"));
}
else
{
TRACE(_T("SpanExcluding 返回false:12f 有字符在nice中 \n"));
}
if (str[0] == str[0].SpanExcluding(_T("fault")))
{
TRACE(_T("SpanExcluding 返回true:12f 所有字符都不在fault中 \n"));
}
else
{
TRACE(_T("SpanExcluding 返回false:12f 有字符在fault中 \n"));
}
if (str[1] == str[1].SpanIncluding(_T("0123456789")))
{
TRACE(_T("SpanIncluding 返回true:5a9 全是0~9的数字字符 \n"));
}
else
{
TRACE(_T("SpanIncluding 返回false:5a9 不全是0~9的数字字符 \n"));
}
if (str[1] == str[1].SpanIncluding(_T("a123456789")))
{
TRACE(_T("SpanIncluding 返回true:5a9 所有字符都在 a123456789 中 \n"));
}
else
{
TRACE(_T("SpanIncluding 返回false:5a9 有字符不在 a123456789 中 \n"));
}
打印结果如下:
SpanExcluding 返回true:12f 所有字符都不在nice中
SpanExcluding 返回false:12f 有字符在fault中
SpanIncluding 返回false:5a9 不全是0~9的数字字符
SpanIncluding 返回true:5a9 所有字符都在 a123456789 中
总结:
1、SpanExcluding 与 SpanIncluding 执行的过程类似,都是先把要比较的字符串分解成字符数组,逐个的与目标字符串进行比较,但它们的作用是相反的。SpanExcluding 是判断源字符串中所有的字符是否都不在目标字符串中,而SpanIncluding 是判断源字符串中所有的字符是否都在目标字符串中;
2、SpanExcluding 执行过程:源字符串解析后的字符数组,要逐个的与目标字符串(也是解析成字符数组)比较,当两者有相等的字符时,立即返回(视为返回false),只有比较完所有字符,两者都不相等,才返回源字符串(视为返回true);
3、SpanIncluding 执行过程:源字符串解析后的字符数组,要逐个的与目标字符串(也是解析成字符数组)比较,当两者有相等的字符时,就会接着比较下一个字符(while...continue),如果一轮比较完毕后,都没有与目标字符串相同的字符,则返回(视为返回false),只有比较完所有字符,源字符串所有字符都在目标字符串中,才返回源字符串(视为返回true)。