C++ 适当的C++;用于跟踪I';在遍历字符串时用引号括起来

C++ 适当的C++;用于跟踪I';在遍历字符串时用引号括起来,c++,C++,我正在创建一个用于解析HTML的类,我需要确保的是,我没有解析单引号或双引号内的任何内容。我所做的就是做一个统计员 enum quotation {OUTSIDE, INSIDE_SINGLE, INSIDE_DOUBLE}; 然后使用以下类型的模式 void HtmlParser::toNextBracket() { /* Adanvances _curIter to the pointer to the next angled bracket in the range (

我正在创建一个用于解析HTML的类,我需要确保的是,我没有解析单引号或双引号内的任何内容。我所做的就是做一个统计员

enum quotation {OUTSIDE, INSIDE_SINGLE, INSIDE_DOUBLE};
然后使用以下类型的模式

void HtmlParser::toNextBracket()
{
/*
    Adanvances _curIter to the pointer to the next angled bracket in 
    the range (_curIter, _offend]. If there is no angled bracket in 
    that range, then _curIter will equal _offend when the function 
    exits.
*/
    while (_curIter != _offend)
    {
        ++_curIter;
        const char thisChar = getCurChar();
        if (thisChar == '<' || thisChar == '>')
        {
            if (_quoteStatus == OUTSIDE) break;
        }
        else if (thisChar == '\'')
        {
            if (_quoteStatus == INSIDE_SINGLE) _quoteStatus = OUTSIDE;
            else _quoteStatus = INSIDE_SINGLE;

        }
        else if (thisChar == '"')
        {
            if (_quoteStatus == INSIDE_DOUBLE) _quoteStatus = OUTSIDE;
            else _quoteStatus = INSIDE_DOUBLE;
        }
    }
} 
void HtmlParser::toNextBracket()
{
/*
指向指向中下一个角括号的指针的默认值
范围(\u curIter,\u off.)。如果在中没有角括号
这个范围,那么当函数
出口。
*/
而(\u curIter!=\u冒犯)
{
++_库里特;
const char thisChar=getCurChar();
如果(thisChar='')
{
如果(quoteStatus==外部)中断;
}
else if(thisChar=='\'')
{
如果('u quoteStatus==内部,'u单个)'u quoteStatus=外部;
else“u quoteStatus=内部”单个;
}
else if(thisChar==“”)
{
如果('u quoteStatus==内双精度)'u quoteStatus=外双精度;
else“u quoteStatus=内部”u DOUBLE;
}
}
} 

<>但是我觉得必须有更好的方法来做这件事。我应该用哪些C++工具来做一个更优雅的过程?< /p> < p>我怀疑你需要重新评估你的解析HTML的最初要求。 尝试在浏览器中打开以下文件:


引号“马克。”

显然,您的目的是跳过引号内的HTML标记;但是,正如本例所示,引号内的HTML标记与引号外的HTML标记一样有效


为了解析HTML标记,您不需要使用引号或撇号。

我怀疑您需要重新评估解析HTML的初始要求。引号/撇号在解析HTML中不起任何作用:

尝试在浏览器中打开以下文件:


引号“马克。”

显然,您的目的是跳过引号内的HTML标记;但是,正如本例所示,引号内的HTML标记与引号外的HTML标记一样有效


为了解析HTML标记,您不需要使用引号或撇号。

我怀疑您需要重新评估解析HTML的初始要求。引号/撇号在解析HTML中不起任何作用:

尝试在浏览器中打开以下文件:


引号“马克。”

显然,您的目的是跳过引号内的HTML标记;但是,正如本例所示,引号内的HTML标记与引号外的HTML标记一样有效


为了解析HTML标记,您不需要使用引号或撇号。

我怀疑您需要重新评估解析HTML的初始要求。引号/撇号在解析HTML中不起任何作用:

尝试在浏览器中打开以下文件:


引号“马克。”

显然,您的目的是跳过引号内的HTML标记;但是,正如本例所示,引号内的HTML标记与引号外的HTML标记一样有效


为了解析HTML标记,您不需要使用引号或撇号。

一句话:yes

共2个字:stl容器()

您的情况需要一个映射——一个特殊的容器,它可以使用字符(在您的情况下)作为键(就像数组的int索引一样),并使用函数委托(在这个特殊情况下)作为其值。这就是为什么这对被称为键值对的原因

下面是一个很好的代码示例,它描述了您需要什么:

优点:在声明映射后,您获得了o(1)的性能。但是,if..else语句的结构可能效率较低(例如..当当前字符放在块的最后一个“if”语句中时)


只需确保将地图对象存储在静态上下文中(或任何其他位置,只要只构建一次)

一句话:

共2个字:stl容器()

您的情况需要一个映射——一个特殊的容器,它可以使用字符(在您的情况下)作为键(就像数组的int索引一样),并使用函数委托(在这个特殊情况下)作为其值。这就是为什么这对被称为键值对的原因

下面是一个很好的代码示例,它描述了您需要什么:

优点:在声明映射后,您获得了o(1)的性能。但是,if..else语句的结构可能效率较低(例如..当当前字符放在块的最后一个“if”语句中时)


只需确保将地图对象存储在静态上下文中(或任何其他位置,只要只构建一次)

一句话:

共2个字:stl容器()

您的情况需要一个映射——一个特殊的容器,它可以使用字符(在您的情况下)作为键(就像数组的int索引一样),并使用函数委托(在这个特殊情况下)作为其值。这就是为什么这对被称为键值对的原因

下面是一个很好的代码示例,它描述了您需要什么:

优点:在声明映射后,您获得了o(1)的性能。但是,if..else语句的结构可能效率较低(例如..当当前字符放在块的最后一个“if”语句中时)


只需确保将地图对象存储在静态上下文中(或任何其他位置,只要只构建一次)

一句话:

共2个字:stl容器()

您的情况需要一个映射——一个可以使用字符(在您的情况下)作为