解析和比较

时间:2013-02-03 19:00:35

标签: c++ parsing comparison

我正在研究c ++中的解释语言。目前我已经制作了一个从javascript解释的语言版本,并对javascripts DOM进行了一些绑定。现在,我想在c ++中创建一个基于系统的版本,但就像我开始时一样,我意识到,将javascript重写为c ++比我想象的更难。你知道,类型定义,比较等。

现在,我正在设计一个解析器,用于识别小型,大型和混合式封顶中的“部分”一词。问题是,在javascript中,您可以比较字符串值的索引 使用'=='运算符的数字。这不仅可以评估左边的值,还可以用来比较任何东西。好吧,谈论javascript。 问题是,我在c ++中没有经验,但实际上,我想编写一个函数,它将一个字符串作为输入,搜索单词'section'(两个大写和混合)并在它看到时执行某些操作它。听起来很简单吧?好吧,这是我实际上已经成功编译的代码,但它从来没有看到“部分”这个词:

#include <iostream>
#include <string>

string scanForSections(string iText){
    for(int i=0;i<iText.size();i++){
        if((iText[i]=='s'||iText[i]=='S')&&
           (iText[i+1]=='e'||iText[i+1]=='E')&&
           (iText[i+2]=='c'||iText[i+2]=='C')&&
           (iText[i+3]=='t'||iText[i+3]=='T')&&
           (iText[i+4]=='i'||iText[i+4]=='I')&&
           (iText[i+5]=='n'||iText[i+5]=='N')&&
           (iText[i+6]==' ')){
            i+=7;
            cout<<"section found!\n";
        }
    }
    return "0";
}

int main()
{
    scanForSections("section SECTION SeCtIoN");
    return 0;
}

我该如何在这里进行比较? 。等于()?其他比较运营商?子?任何解决方案实例

2 个答案:

答案 0 :(得分:2)

您的函数会查找“sectin”而不是“section”。

顺便说一下,你应该做一些研究,至少要研究一下可用的字符串函数,如果没有研究成可用的解析库。

答案 1 :(得分:1)

我会建议:

  1. 将字符串转换为大写[或小写]。
  2. 使用std::string::find()找到您要查找的字符串。如果找不到该字符串,该函数将返回string::npos
  3. 您可能还想构建某种“要查找的单词”和“如何处理单词”的表格,而不是手工编写一大堆if语句。

    当你有几十个关键词时,做你比较每个字母的方法是不可持续的 - 如图所示,你错过了你正在寻找的工作中的一个字母。