-1

我正在研究 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;
}

我应该如何在这里进行比较?。等于()?其他比较运算符?子串?任何解决方案?例子?

4

2 回答 2

2

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

顺便说一句,你真的应该做一些研究,至少研究可用的字符串函数,如果不研究可用的解析库的话。

于 2013-02-03T19:02:19.987 回答
1

我建议这样做:

  1. 将字符串转换为大写[或小写]。
  2. 用于std::string::find()定位您要查找的字符串。string::npos如果未找到该字符串,则该函数返回。

您可能还想构建某种“要查找的单词”和“如何处理该单词”的表格,而不是手动编写一大堆 if 语句。

当您有数十个关键字时,使用比较每个字母的方法是不可持续的 - 如此处所示,您错过了您正在寻找的工作中的一个字母。

于 2013-02-03T19:07:20.943 回答