我正在研究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;
}
我该如何在这里进行比较? 。等于()?其他比较运营商?子?任何解决方案实例
答案 0 :(得分:2)
您的函数会查找“sectin”而不是“section”。
顺便说一下,你应该做一些研究,至少要研究一下可用的字符串函数,如果没有研究成可用的解析库。
答案 1 :(得分:1)
我会建议:
std::string::find()
找到您要查找的字符串。如果找不到该字符串,该函数将返回string::npos
。 您可能还想构建某种“要查找的单词”和“如何处理单词”的表格,而不是手工编写一大堆if语句。
当你有几十个关键词时,做你比较每个字母的方法是不可持续的 - 如图所示,你错过了你正在寻找的工作中的一个字母。