此 C++ 代码中有一个错误。它将单词之间的多个空格替换为一个空格。无法弄清楚它在哪里。它不应该修剪两个单词之间的空格并将它们替换为一个。这是处理空格和空白的方法。
const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding )
{
if ( !p || !*p )
{
return 0;
}
if ( encoding == TIXML_ENCODING_UTF8 )
{
while ( *p )
{
const unsigned char* pU = (const unsigned char*)p;
if ( *(pU+0)==TIXML_UTF_LEAD_0
&& *(pU+1)==TIXML_UTF_LEAD_1
&& *(pU+2)==TIXML_UTF_LEAD_2 )
{
p += 3;
continue;
}
else if(*(pU+0)==TIXML_UTF_LEAD_0
&& *(pU+1)==0xbfU
&& *(pU+2)==0xbeU )
{
p += 3;
continue;
}
else if(*(pU+0)==TIXML_UTF_LEAD_0
&& *(pU+1)==0xbfU
&& *(pU+2)==0xbfU )
{
p += 3;
continue;
}
if ( IsWhiteSpace( *p ) ) // Still using old rules for white space.
p++;
else
break;
}
}
else
{
while ( *p && IsWhiteSpace( *p ) )
// while(*p)
++p;
}
return p;
}
输入:
<?xml version="1.0" standalone="no" ?>
<ToDo>
<bold>Toy store!</bold>
</ToDo>
预期输出:
<?xml version="1.0" standalone="no" ?>
<ToDo>
<bold>Toy store!</bold>
</ToDo>
观察到的输出:
<?xml version="1.0" standalone="no" ?>
<ToDo>
<bold>Toy store!</bold>
</ToDo>